C++11 在无序的u型映射C+上迭代+;

C++11 在无序的u型映射C+上迭代+;,c++11,unordered-map,C++11,Unordered Map,在无序的_映射中以特定顺序插入的键在使用迭代器迭代映射时会以相同的顺序出现吗 例如:如果我们在B中插入(4,3),(2,5),(6,7)。 然后像这样迭代: for(auto it=B.begin();it!=B.end();it++) { cout<<(it->first); } for(自动it=B.begin();it!=B.end();it++){ 从关于无序映射的开始成员函数的页面上看: 请注意,无序的_映射对象不保证哪个特定元素被视为其第一个元素 因此,

在无序的_映射中以特定顺序插入的键在使用迭代器迭代映射时会以相同的顺序出现吗

例如:如果我们在B中插入(4,3),(2,5),(6,7)。 然后像这样迭代:

for(auto it=B.begin();it!=B.end();it++) {
    cout<<(it->first); 
}
for(自动it=B.begin();it!=B.end();it++){
从关于
无序映射的
开始
成员函数的页面上看:

请注意,无序的_映射对象不保证哪个特定元素被视为其第一个元素

因此,不能保证元素将按照插入顺序进行迭代

仅供参考,您可以更简单地迭代
无序地图

for (auto& it: B) {
    // Do stuff
    cout << it.first;
}
for(自动&it:B){
//做事
cout添加到@提供的

  • 无序映射是一个关联容器,包含具有唯一键的键值对。元素的搜索、插入和删除 具有平均恒定时间复杂度

    在内部,元素不是按任何特定的顺序排序,而是组织成bucket。元素放在哪个bucket中 完全取决于其密钥的散列。这允许快速访问 单个元素,因为一旦计算哈希,它就引用 将元件放入的精确桶中

    请参阅中的参考

  • 根据我在库拉的回答 如果您希望按排序顺序保存中间数据,请使用
    std::map
    而不是
    std::unordered\u map
    。默认情况下,它将使用
    std::less
    按键排序,因此您将以升序获得结果

    std::unordered_-map
    是哈希表数据结构的实现,因此它将根据
    std::unordered_-map
    使用的哈希值在内部排列元素。但是在案例
    std::map
    中,它通常是一个红黑二叉树实现

    请参阅中的参考


因此,我认为我们得到了更清楚的答案。

它被称为“无序”因为插入元素的存储和迭代顺序通常不是客户端代码可以用于其自身目的的。如果您希望按插入顺序排序,如果您不需要删除元素,最好使用
向量,或者在插入时间戳上键入
std::map
(具有足够的分辨率以保证唯一性)或递增插入计数器。在当前的实现中,
unordered_map
只是一个hashmap,因此不保留插入顺序: