C++17부터 지원하는 structured binding이란 어떤 배열, STL 같은 컨테이너에서 멤버들을 쉽게 바인딩할 수 있도록 도와주는 문법이다.
친숙한 map을 예시로 들어보자
#include <iostream>
#include <map>
int main()
{
std::map<int, int> mp;
for (int i = 1; i < 11; i++)
{
mp[i] = i * i;
}
// iterator, basic for
for (std::map<int, int>::iterator it = mp.begin(); it != mp.end(); it++)
{
std::cout << it->first << ' ' << it->second << '\\n';
}
// auto, enhanced for
for (auto &i: mp)
{
std::cout << i.first << ' ' << i.second << '\\n';
}
// structured binding, enhanced for
for (auto &[k, v]: mp)
{
std::cout << k << ' ' << v << '\\n';
}
}
array의 모든 원소를 가져와보자
#include <iostream>
#include <array>
int main()
{
std::array<int, 5> ar;
for (int i = 0; i < 5; ++i) ar[i] = i + 1;
auto [a, b, c, d, e] = ar;
std::cout << a << ' ' << b << ' ' << c << ' ' << d << ' ' << e << '\\n';
}
stl 에서 쓰는 것 뿐만 아니라 직접 정의한 구조체에도 사용이 가능하다
#include <iostream>
struct point2d
{
int x, y;
};
int main()
{
point2d p;
p.x = 10, p.y = 2000;
auto &[a, b] = p;
a = 200, b = 0;
std::cout << p.x << ' ' << p.y << '\\n';
}