0%

C++语法之unordered_map的4种遍历方式

[TOC]

头文件

1
#include<unordered_map>

方式一:值传递遍历

1
2
3
4
5
6
7
8
for(pair<int, int> kv: map){
cout << kv.first << kv.second << endl;
}

/*使用auto*/
for(auto kv: map){
cout << kv.first << kv.second << endl;
}

方式二:引用传递遍历

注意:要加const

1
2
3
4
5
6
7
8
9
10
11
12
13
for(const pair<int, int>& kv: map){
cout << kv.first << kv.second << endl;
}

/*const加里面也是可以的*/
for(pair<const int, int>& kv: map){
cout << kv.first << kv.second << endl;
}

/*使用auto*/
for(auto &kv: map){
cout << kv.first << kv.second << endl;
}

方式三:使用迭代器遍历

1
2
3
4
5
6
7
8
for(unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++){
cout << it->first << it->second << endl;
}

/*使用auto*/
for(auto it = map.begin(); it != map.end(); it++){
cout << it->first << it->second <<endl;
}

方式四:结构化绑定(c++17特性)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*值传递*/
for(auto [k, v]: map){
cout << k << v << endl;
}

/*引用传递*/
for(auto [k, v]: map){
cout << k << v << endl;
}

/*其中,如果只想使用键,值可以用_代替*/
for(auto &[k, _]: map){
cout << k << endl;
}

/*同理,如果指向只用值,键可以用_代替*/
for(auto &[_, v]: map){
cout << v << endl;
}