我有两个元素(6和747)共享它们的密钥(“蛋”)。我想找到共享一个密钥的所有元素(比如说“鸡蛋”,但是在现实生活中我会为每个密钥都这样做)。怎么做?
必须有一种方法可以从数据结构中获取容器或其他东西。 。 。
最佳答案
您仍然会误用key的哈希值来获取key的值。但要回答所问的问题:您可以将bucket迭代器与unordered_map
的bucket()
成员函数一起使用:
std::unordered_map<int,int,dumbest_hash> m;
m[0] = 42;
m[1] = 43;
size_t bucket = m.bucket(1);
for(auto it = m.begin(bucket), e = m.end(bucket); it != e; ++it) {
cout << "bucket " << bucket << ": " << it->first << " -> " << it->second << '\n';
}
demo
用简单且最正确的术语来说,无序容器在接口(interface)方面模仿了它们的有序对象。这意味着,如果
map
不允许您拥有重复的键,那么unordered_map
都不会。unordered
确实使用哈希函数来加快查找速度,但是如果两个键具有相同的哈希,则它们不一定具有相同的值。为了使行为类似于有序容器,unordered_set
和unordered_map
仅在元素实际上相等时(使用operator==
或提供的比较器)才认为元素相等,而不是在其哈希值冲突时才认为它们相等。为了正确理解,我们假设
"eggs"
和"chicken"
具有相同的哈希值,并且不进行相等检查。那么以下代码将是“正确的”:unordered_map<string, int> m;
m["eggs"] = 42;
m.insert(make_pair("chicken", 0)); // not inserted, key already exists
assert(m["chicken"] == 42);
但是,如果要允许在同一映射中使用重复键,只需使用
unordered_multimap
即可。关于c++ - 如何检索unordered_map的碰撞?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40710592/