使用k个值零为零的存储桶初始化c ++ 14 unordered_map

时间:2019-06-22 18:53:49

标签: c++ c++14

我正在尝试创建一个最小数量的初始存储桶(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>)

有没有办法实现这一目标?

2 个答案:

答案 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小于该值,则该功能可能无效。