Tea*_*low 4 c++ stl unordered-map c++11
这是我正在运行的代码,使用g ++ 4.6和 -std=c++0x
std::unordered_map<int, int> um;
um.insert(std::make_pair(42, 43));
um.insert(std::make_pair(342, 343));
um.insert(std::make_pair(142, 143));
um.insert(std::make_pair(242, 243));
for(auto e : um)
std::cout << e.first << std::endl;
Run Code Online (Sandbox Code Playgroud)
这打印:
242
342
42
142
Run Code Online (Sandbox Code Playgroud)
现在我可以用um.begin()->first或访问242 um.begin(0)->first.342可以使用um.begin(1)->first.但是um.begin(2)->first或者um.begin(3)->first使程序崩溃.我能够访问不同的数字um.begin(2)->first.我无法向自己解释这种行为.我用um.begin(int)错了吗?
Ker*_* SB 13
你这很困惑.begin(1)是一个非常特殊的构造,仅用于访问底层哈希表结构中的特定存储桶并返回本地迭代器的无序容器.这与以某种"随机访问"方式访问任何特定元素无关,而您根本无法做到这一点.
使用无序容器所能做的就是遍历整个集合或find按键遍历特定元素.这些元素无法按任何特定顺序访问,因此名称为"无序".
您可以使用本地迭代器迭代每个存储桶[begin(n), end(n)),但当然您必须使用与任何范围相同的惯用语来处理空容器.可以使用bucket_count成员函数发现可用的存储桶总数.
请注意,在大多数情况下,您应该期望存储桶包含零个或一个元素.每个桶的平均元素数量可通过load_factor成员函数获得(并可配置).