C++ 표준 라이브러리(STL)에는 다양한 컨테이너가 포함되어 있습니다. 여기서는 unordered_set과 unordered_map에 대해 알아보겠습니다. 이 두 컨테이너는 해시 테이블을 기반으로 하며, 특정 데이터를 빠르게 찾을 수 있는 장점이 있습니다.
[C++] STL 컨테이너 unordered set, unordered map 사용법, 차이점
unordered_set 사용법
아래는 unordered_set 사용방법에 대한 예제 코드입니다.
#include <unordered_set>
#include <iostream>
int main() {
std::unordered_set<int> mySet;
// 요소 추가
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);
// 요소 확인
if (mySet.find(2) != mySet.end()) {
std::cout << "2가 집합에 있습니다." << std::endl;
}
// 요소 제거
mySet.erase(1);
return 0;
}
추가는 insert를 사용하며 find로 요소를 찾고, erase로 제거할 수 있습니다.
unordered_map 사용법
아래는 unordered_map 사용방법에 대한 예제 코드입니다.
#include <unordered_map>
#include <iostream>
int main() {
std::unordered_map<std::string, int> myMap;
// 요소 추가
myMap["one"] = 1;
myMap["two"] = 2;
myMap["three"] = 3;
// 요소 확인
if (myMap.find("two") != myMap.end()) {
std::cout << "키 'two'의 값은 " << myMap["two"] << "입니다." << std::endl;
}
// 요소 제거
myMap.erase("one");
return 0;
}
추가는 insert 를 사용하거나 배열처럼 추가할 수 있으며, find와 erase를 사용합니다.
두 컨테이너의 차이 및 특징
두 컨테이너는 아래와 같은 차이가 납니다.
- 요소의 형태:
- unordered_set: 단일 값 (중복 허용 안 함).
- unordered_map: 키-값 쌍.
- 순서(공통):
- unordered_set과 unordered_map은 해시 테이블을 기반으로 하기 때문에 요소의 순서가 정해져 있지 않다.
- 접근 방법:
- unordered_set: 값에 직접 접근.
- unordered_map: 키를 통해 값에 접근.
- 메모리 사용량:
- unordered_map은 pair나 std::make_pair를 사용해 키와 값을 저장하므로 unordered_set에 비해 조금 더 메모리를 사용할 수 있다.
unordered 의 의미
앞서 그냥 set, map 을 알아보았었습니다.
2023.09.02 - [개발/C, C++] - [C++] STL 컨테이너 Set과 Map 활용법과 차이점
그냥 set, map과 unordered set, unordered map의 차이는 무엇일까요?
간단히 정리하자면 그냥 set/map은 정렬된 상태를 유지하면서 검색 속도가 상대적으로 느릴 수 있고, unordered_set/map은 정렬을 하지 않지만 검색 속도가 빠른 것이 특징입니다.
결론
이렇게 unordered_set과 unordered_map은 각각 고유한 용도로 사용되며, 프로그램의 요구 사항에 따라 선택되어야 합니다. 해시 테이블을 사용하기 때문에 빠른 검색이 가능하며, 중복을 허용하지 않거나 키-값 매핑이 필요할 때 유용하게 사용할 수 있습니다.
'개발 > C, C++' 카테고리의 다른 글
[Clang] C++ 빌드 시 undefined reference error 해결 방법 (0) | 2023.12.02 |
---|---|
[C++] class 생성자에서 explicit 키워드의 의미 (0) | 2023.09.05 |
[C++] STL 컨테이너 Set과 Map 활용법과 차이점 (0) | 2023.09.02 |
[C++] STL 컨테이너 Vector 의 용도와 특징, 사용 예제 (0) | 2023.09.01 |
[C++] 생성자에서 virtual 가상 함수 호출하는 경우의 문제 (0) | 2023.08.11 |