C++에서 std::map 또는 std::unordered_map 초기화
이 게시물에서는 C++에서 지도를 초기화하는 방법에 대해 설명합니다.
초기화 방법에는 여러 가지가 있습니다. std::map
또는 std::unordered_map
C++에서 아래와 같이
1. 초기화 목록 사용
C++11 이상에서는 다음을 사용할 수 있습니다. 초기화 목록 '{...}'
지도 컨테이너를 초기화합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <unordered_map> int main() { std::unordered_map<int, std::string> m = { {1, "one"}, {2, "two"}, {3, "three"} }; for (auto const &pair: m) { std::cout << "{" << pair.first << " -> " << pair.second << "}\n"; } return 0; } |
결과:
{3 -> three}
{1 -> one}
{2 -> two}
대괄호를 사용하는 대신 완전한 이름을 지정하거나 std::make_pair
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <unordered_map> int main() { std::unordered_map<int, std::string> m = { std::pair<int, std::string> (1, "one"), std::pair<int, std::string> (2, "two"), std::pair<int, std::string> (3, "three") }; for (auto const &pair: m) { std::cout << "{" << pair.first << " -> " << pair.second << "}\n"; } return 0; } |
결과:
{3 -> three}
{1 -> one}
{2 -> two}
다음을 사용하여 이진 술어를 전달할 수도 있습니다. std::map
, 동일한 유형의 두 값을 사용하고 지도 키의 순서를 정의합니다. 술어는 첫 번째 매개변수가 두 번째 매개변수 앞에 나타나면 true를 반환하고 그렇지 않으면 false를 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> #include <map> // 이진 술어 struct comp { template<typename T> bool operator() (const T &l, const T &r) const { return l > r; } }; int main() { // 키는 비교 객체에 따라 정렬됩니다. std::map<int, std::string, comp> m = { std::make_pair(1, "one"), std::make_pair(2, "two"), std::make_pair(3, "three") }; for (auto const &pair: m) { std::cout << "{" << pair.first << " -> " << pair.second << "}\n"; } return 0; } |
결과:
{3 -> three}
{2 -> two}
{1 -> one}
2. 쌍의 어레이에서
우리는 사용할 수 있습니다 범위 생성자 쌍의 어레이 또는 쌍의 다른 컨테이너의 요소에서 집합을 초기화합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include <unordered_map> int main() { std::pair<int, std::string> arr[] = { std::make_pair(1, "one"), std::make_pair(2, "two"), std::make_pair(3, "three") }; int n = sizeof(arr) / sizeof(arr[0]); std::unordered_map<int, std::string> m(arr, arr + n); // 또는 수행 // std::unordered_map<int, std::string> m(std::begin(arr), std::end(arr)); for (auto pair: m) { std::cout << "{" << pair.first << " -> " << pair.second << "}\n"; } return 0; } |
결과:
{3 -> three}
{1 -> one}
{2 -> two}
3. 다른 지도에서
우리는 사용할 수 있습니다 복사 생성자 다른 지도의 요소에서 지도를 초기화합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> #include <unordered_map> int main() { std::unordered_map<int, std::string> map = { std::make_pair(1, "one"), std::make_pair(2, "two"), std::make_pair(3, "three") }; std::unordered_map<int, std::string> m(map); for (auto const &pair: m) { std::cout << "{" << pair.first << " -> " << pair.second << "}\n"; } return 0; } |
결과:
{2 -> two}
{3 -> three}
{1 -> one}
4. 기본 생성자 사용
우리는 사용할 수 있습니다 빈 컨테이너 생성자(또는 기본 생성자) 아래와 같이 요소가 없는 빈 맵을 구성하려면 다음을 수행합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <unordered_map> int main() { std::unordered_map<int, std::string> m; for (auto const &pair: m) { std::cout << "{" << pair.first << " -> " << pair.second << "}\n"; } return 0; } |
결과:
The standard output is empty
초기화에 대한 모든 것입니다. std::map
또는 std::unordered_map
C++에서.