从unordered_map获取键和值的列表(作为vector )的最有效方法是什么? 为了具体,假设有问题的地图是一个unordered_map<string, double> 。 然后,我想将键作为一个vector<string> ,并将这些值作为一个vector<double> 。 unordered_map<string, double> um; vector<string> vs = um.enum_keys(); vector<double> vd = um.enum_values(); 我可以遍历地图并收集结果,但有没有更有效的方法? 有一个方法也可以用于普通地图,因为我可能会切换到这个地方。
假设我想用一个string作为关键字映射数据。 我应该select什么容器, map或unordered_map ? unordered_map占用更多的内存,所以我们假设内存不是问题,关心的是速度。 unordered_map应该通常给O(1)的平均复杂度O(n)的最坏情况。 在什么情况下会到达O(n)? 什么时候map比unordered_map更省时? 当n很小时会发生吗? 假设我将使用STL unordered_map与默认haser Vs. 地图。 string是关键。 如果我要迭代元素而不是每次访问单个元素,我应该更喜欢map吗?
现在, std在unordered_map有一个真正的哈希映射,为什么(或什么时候)我仍然想要在真正存在的系统map通过unordered_map使用好的旧map ? 有什么明显的情况我不能马上看到?
我需要像这样定义一个unordered_map unordered_map<pair<int, int>, *Foo> ,定义和传递一个hash和equal函数到这个映射的语法是什么? 我试过传递给它这个对象: class pairHash{ public: long operator()(const pair<int, int> &k) const{ return k.first * 100 + k.second; } }; 没有运气: unordered_map<pair<int, int>, int> map = unordered_map<pair<int, int>, int>(1, *(new pairHash())); 我不知道size_type_Buskets是什么意思,所以我给了它1 。 什么是正确的方法来做到这一点? 谢谢。
最近在C ++中讨论unordered_map使我意识到,由于查找的效率( 分段O(1)与O(log n) ),我应该使用unordered_map来处理以前使用map大多数情况。 大多数时候我使用一个映射,我使用int或std::strings作为键,因此我没有问题的散列函数的定义。 我想到的越多,就越意识到我找不到在unordered_map上使用简单types的情况下使用std::map任何原因 – 我查看了接口,并没有发现任何会影响我的代码的重大差异。 因此,这个问题是否有任何真正的理由使用简单的types如int和std::string情况下unordered map使用std::map ? 我从严格的编程观点来问 – 我知道这不是完全被认为是标准的,它可能会带来移植的问题。 另外,我希望正确答案之一可能是“对于较小的数据集更有效”,因为开销较小(这是真的吗?) – 因此,我想限制问题的情况下,密钥的数量是非平凡的(> 1 024)。 编辑: 呃,我忘了明显的(谢谢GMan!) – 是的,地图的顺序是当然的 – 我知道,我正在寻找其他原因。
我正在尝试使用自定义类作为unordered_map的关键字,如下所示, #include <iostream> #include <algorithm> #include <unordered_map> //#include <map> using namespace std; class node; class Solution; class Node { public: int a; int b; int c; Node(){} Node(vector<int> v) { sort(v.begin(), v.end()); a = v[0]; b = v[1]; c = v[2]; } bool operator==(Node i) { if ( ia==this->a && ib==this->b &&i.c==this->c ) { return […]