为什么在打印无序map和map(dictionary)的键和值时出现异常?

时间:2019-03-04 16:04:45

标签: c++ dictionary stl unordered-map

这是我的代码,请告诉我为什么它不像地图中那样从一开始就以正确的方式打印

#include<bits/stdc++.h>
using namespace std;

int main(){
unordered_map<int,int>arr;
for(int i=1;i<=10;i++){
    arr[i]=i*i;
}

for(auto it=arr.begin();it!=arr.end();it++){
    cout<<it->first<<" "<<it->second<<"\n";
}

cout<<"normal map \n";

map<int,int>arry;
for(int i=1;i<=10;i++){
    arry[i]=i*i;
}

for(auto it=arry.begin();it!=arry.end();it++){
    cout<<it->first<<" "<<it->second<<"\n";
}

}

我的输出是

10 100

9 81

8 64

7 49

6 36

5 25

1 1

2 4

3 9

4 16

法线贴图

1 1

2 4

3 9

4 16

5 25

6 36

7 49

8 64

9 81

10 100

为什么无序地图以这种方式打印值,为什么不像地图一样打印

1 个答案:

答案 0 :(得分:1)

std::unordered_map不会以任何特定顺序对键进行排序。这就是为什么它被称为 unordered

  

在内部,这些元素不是按照任何特定顺序排序的,而是按桶进行组织。元素放入哪个存储桶完全取决于其键的哈希值。这样一来,就可以快速访问各个元素,因为一旦计算出哈希值,它就指向该元素所放置的确切存储桶。