【发布时间】:2019-05-03 17:42:33
【问题描述】:
我想知道哪些实现(如下)会在时间和空间上给我带来更好的性能。假设我有以下目录结构。
/dir1
OWN={root,usr}
/dir2
DEP={dir1}
OWN={usr}
我一次性遍历“./”中的所有目录,其中每个目录都有一个所有者文件,并且可能有一个依赖文件。我阅读了他们的内容并构建了哈希表。
#include <iostream>
#include <unordered_map>
using namespace std;
int main(int argc, char** argv){
unordered_map<string, vector<string>> dir_ownerss;
// /dir1 --> [root, usr]
// /dir2 --> [usr]
unordered_map<string, vector<string>> dir_dependenciess;
// /dir1 --> [dir2]
unordered_map<string, vector<vector<string>>> dir_owners_and_dependenciess;
// /dir1 --> [ [/dir1, root, usr] [/dir2, usr] ]
// /dir2 --> [ [/dir2, usr] ]
return 0;
}
在这个程序的后面,我将做一些查找或 find() 操作来检查所有权和依赖关系。由于哈希运算平均为 O(1),因此按顺序我看不出有什么区别。一个需要两个 find() 调用,另一个需要一个调用,但由于散列、空间等原因可能不是首选……此外,设计方面,没有限制。
【问题讨论】:
-
dir_owners_and_dependencies的第二个类型参数真的需要是向量吗?听起来这些向量总是包含两个项目(一个所有者向量和一个依赖向量),在这种情况下,将向量存储在向量中是多余的;您可以改用tuple、数组或类/结构(其中包含两个向量)。 -
@TedLyngmo 会的。它更像是一个 CS 问题而不是编程。但 C++ 始终是一个不错的选择。
-
@JeremyFriesner 是的。明确包含不同的所有者和部门以供以后使用。一个目录可能依赖于许多其他目录。
-
@KyleDickson 它仍然不是最小的、完整的和可验证的。尝试从这里复制你自己的代码并编译它。
标签: c++ hash stl hashtable unordered-map