我正在尝试创建一个最小数量的初始存储桶(k)的unordered_map,并将所有键值对初始化为零。稍后,它应该进入for循环并打印值。
int someFunction(int k){
unordered_map<int, int> majority(k, {0,0});
}
for(auto m : majority){
cout << m.first << " " << m.second << " \n";
}
我收到以下编译(c ++ 14)错误:
no matching function for call to ‘std::unordered_map<int, int>::unordered_map(int&, <brace-enclosed initializer list>)
有没有办法实现这一目标?
答案 0 :(得分:1)
std::unordered_map
仅支持唯一键,因此构造函数不存在。
如果多次需要相同的密钥,则可以使用std::unordered_multimap
。有关可用的构造函数,请参见reference。
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_multimap<int, int> map;
const int k = 5;
for (int i = 0; i < k; ++i)
{
map.emplace(0, 0);
}
for (auto& kv: map)
{
std::cout << kv.first << " " << kv.second << std::endl;
}
}
答案 1 :(得分:0)
unordered_map表示哈希数据结构。通过哈希定义,每个键都必须是唯一的。因此,您无法使用几个零个int键初始化多数。 相反,您可以使用保留功能:
无效储备(size_type n);
请求更改容量
将容器中的存储桶数(bucket_count)设置为最大 适合包含至少n个元素。
如果n大于当前bucket_count乘以 max_load_factor,增加了容器的bucket_count,并且 重新哈希是强制的。
如果n小于该值,则该功能可能无效。