본문 바로가기

코딩 및 기타/어서와! 자료구조와 알고리즘

순서없는 연관 컨테이너

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;
    
}

'코딩 및 기타 > 어서와! 자료구조와 알고리즘' 카테고리의 다른 글

DFS 와 BFS  (0) 2023.08.31
그래프  (0) 2023.08.30
해싱과 해시 함수  (0) 2023.08.30
우선순위 큐  (0) 2023.08.28
  (0) 2023.08.28