下面的示例都是以下列定义的map为例。
#include
#include
using namespace std;
unordered_map<int, int> map = {
pair<int, int>(1, 2),
pair<int, int>(3, 4),
pair<int, int>(5, 6)};
pair
的形式进行值传递。 for (pair<int, int> kv : my_map) {
cout << kv.first << "=>" << kv.second << endl;
}
auto
的形式进行值传递。 for (auto kv : my_map) {
cout << kv.first << "=>" << kv.second << endl;
}
pair
的形式进行引用传递。如果使用pair进行引用传递,必须添加const
,不然会报错,const既可以添加在pair前边,也可以添加至键前面,但是它们有区别
。
const添加在pair前面时,键和值都不可以发生改变
,如下所示。
for (const pair<int, int>& kv : my_map) {
//kv.second += 3;//pair前边添加const不可以改变它的值
//kv[7] = 9 //pair前边添加const不可以添加多余的键
cout << kv.first << "=>" << kv.second << endl;
}
const添加在pair的key前边,my_map不可以添加新的键值对,但可以改变原先的值
,如下所示。
for (pair<const int, int>& kv : my_map) {
kv.second += 3;//只对key做const,可以改变其值
// kv[7] = 9 //pair前边添加const不可以添加多余的键
cout << kv.first << "=>" << kv.second << endl;
}
auto
的形式进行引用传递。 for (auto& kv : my_map) {
kv.second += 3;
cout << kv.first << "=>" << kv.second << endl;
}
使用自定义迭代器遍历。
for (unordered_map<int, int>::iterator it = my_map.begin(); it != my_map.end(); it++) {
cout << it->first << "=>" << it->second << endl;
}
使用auto
迭代器遍历。
for (auto it = my_map.begin(); it != my_map.end(); it++) {
cout << it->first << "=>" << it->second << endl;
}
需要另外说明的是,auto[]
绑定方式不仅适用于pair形式,还适用于tuple形式,搬砖的效率又提高了。。。
值传递的结构化绑定。
for (auto [k, v] : my_map) {
cout << k << "=>" << v << endl;
}
引用传递的结构化绑定
for (auto& [k, v] : my_map) {
cout << k << "=>" << v << endl;
}
只需要键的结构化绑定
for (auto& [k, _] : my_map) {
cout << "k" << "=>" << k << endl;
}
只需要值的结构化绑定
for (auto& [_, v] : my_map) {
cout << "v" << "=>" << v << endl;
}
# include
# include
int main()
{
std::tuple<std::string, std::string, int> my_tuple("xiaoming", "man", 20);
std::string name;
std::string gender;
int age;
std::tie(name, gender, age) = my_tuple;
std::cout << name << " " <<gender<< " " << age << std::endl;;
}
# include
# include
int main()
{
std::tuple<std::string, std::string, int> my_tuple("xiaoming", "man", 20);
auto [name, gender, age] = my_tuple;
std::cout << name << " " <<gender<< " " << age << std::endl;;
}
# include
struct s {
std::string name = "xiaoming";
std::string gender = "man";
int age = 20;
};
int main()
{
s my_struct;
auto [name, gender, age] = my_struct;
std::cout << name << " " <<gender<< " " << age << std::endl;;
}
使用数组结构化绑定的时候,元素个数也要严格对齐
。
# include
int main()
{
int a[2] = {1,2};
auto [x,y] = a;
}
int a = 1, b = 2;
const auto& [x, y] = std::tie(a, b); // x 与 y 类型为 int&