728x90
std::unordered_set 컨테이너
- key 타입의 키 값을 저장하는 순서없는 연관 컨테이너
- 데이터 삽입, 삭제, 탐색은 O(1) 시간 복잡도로 동작
- 만약 중복되는 데이터를 unordered_set 구조로 저장하려면 std::unordered_multiset 사용
- 사용자 정의 타입을 저장할 경우, 해시 함수 Hash와 비교를 위한 KeyEqual을 지정해야 함
- <unordered_set>에 정의되어 있음
- 주요 함수 사용법은 std::set과 거의 유사함
#include <iostream>
#include <string>
#include <vector>
#include <unordered_set>
using namespace std;
// car -> radio -> orange -> ear -> radio
// 끝말잇기 게임에서 중복된 단어를 말했는지 체크하는 코드
int main()
{
unordered_set<string> words;
words.insert("car");
words.insert("radio");
words.insert("orange");
words.insert("ear");
// 중복이 되는지 확인하는 위치
string word = "radio";
if (words.find(word) != words.end()){
cout << word << " is used!" << endl;
}
else{
cout << word << " is NOT used!" << endl;
}
vector<int> numbers {1, 5, 3, 1, 5, 7, 4, 5, 6, 3, 2, 7, 3, 6, 2};
unordered_set<int> num_set(numbers.begin(), numbers.end());
// 중복되지 않은 개수를 구할 수 있음
cout << num_set.size() << endl;
}
std::unordered_map 컨테이너
- key 타입의 키와 T타입의 값의 쌍을 저장하는 순서없는 연관 컨테이너
- 데이터 삽입, 삭제, 탐색은 O(1) 시간 복잡도로 동작해야 함
- 만약 중복되는 데이터를 unordered_map 구조로 저장하려면 std::unordered_multimap 사용
- 사용자 정의 타입을 저장할 경우, 해시 함수 Hash와 비교를 위한 KeyEqual을 지정해야 함
- <unordered_map>에 정의되어 있음
- 주요 함수 사용법은 std::map과 거의 유사함
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
{
// 정렬이 안되어있는 상태로 출력이 됨
unordered_map<string, int> fruits;
// 데이터 삽입
fruits.insert({"apple", 1000});
fruits.insert({"banana", 1500});
// 특정 데이터 값 수정
fruits["apple"] = 3000;
fruits["lemon"] = 5000;
fruits["grape"];
// 특정 데이터 삭제
fruits.erase("banana");
for (auto p : fruits)
cout << p.first << " is " << p.second << " Won. " << endl;
}