我想用固定元素100初始化一个unordered_map
。keys
来自0
到100
,这些键的所有值都是0
using HashMap = unordered_map < int, int > ;
HashMap map;
for (int idx = 0; idx < 100; ++idx) {
map[idx] = 0;
}
问题1:
有没有直接的方法可以像python
中的以下代码那样做?
d = {x: x % 2 == 0 for x in range(1, 11)}
问题2:
使用上面的初始化代码,我认为所有元素都按升序排序,但结果是:
为什么第一个元素是8
而第二个元素是64
,所有左边元素都按升序排列?
答案 0 :(得分:2)
这不如Python表达式那么漂亮,但它应该可以解决问题。
#include <algorithm>
#include <iostream>
#include <iterator>
#include <unordered_map>
int main() {
std::unordered_map<int, bool> m;
int i = -1;
std::generate_n(std::inserter(m, m.begin()),
10,
[&i](){
++i;
return std::make_pair(i, i % 2 == 0);
});
for (auto const &p: m)
std::cout << '<' << p.first << ", " << p.second << ">\n";
return 0;
}
无序地图被称为无序地图。由于它们是作为哈希映射实现的,因此密钥不是任何可预测的顺序。将std :: unordered_map用于密集的整数键集合可能不是解决任何问题的最有效方法,特别是如果您希望能够按顺序提取密钥。
答案 1 :(得分:0)
考虑boost::irange
无序映射的内部数据结构为hash table,在散列过程中并不总是按住键顺序。