结构化绑定是C++17引入的一项特性,它允许将一个对象解构为多个变量,即允许你通过一条语句将一个对象的成员绑定到多个变量上。这在处理键值对容器(如std::map
、std::unordered_map
)或者返回多个值的函数时非常方便。
解构本质上是拆分操作。它从一个复杂的、包含多个元素的对象中提取出各个组成部分,并将这些部分分配给单独的变量。例如,将一个pair
或tuple
的元素拆分成独立的变量,或者将一个结构体的成员变量拆分成独立的变量。
基本语法:
auto [var1, var2, ..., varN] = expression;
解构模板类:
解构pair
:
pair<int, string> num = {1, "one"};
// 解构 pair
auto [n, s] = num;
cout << n << " " << s << endl;
解构tuple
:
tuple<int, double, string> T = {1, 1.4, "hello"};
// 解构 tuple
auto [i, d, s] = T;
cout << i << " " << d << " " << s << endl;
在范围基for循环中使用:
结构化绑定在范围基for循环中特别有用,尤其是当要遍历键值对容器时:
unordered_map<string, int> wordCount = {{"hello", 1}, {"world", 2}};
for (const auto& [word, count] : wordCount) {
cout << word << " " << count << endl;
}
map<int, string> m = {{1, "one"}, {2, "two"}, {3, "three"}};
for (const auto& [key, value] : m) {
cout << key << ": " << value << endl;
}