std::unordered_map(해시 테이블)

Jin Hur·2022년 5월 12일
0

STL에서 제공하는 해시 자료구조이다. 검색(find or at)/삭제(erase)/삽입(insert)이 O(1)에 처리될 수 있다.
std::map보다 빠른 탐색을 할 수 있는 자료구조이며 이는 map은 내부가 이진탐색 트리로 이루어져 있으므로 탐색에서의 시간 복잡도가 O(logn)이다.

멤버 함수

int main(){
   
    unordered_map<string, string> CLASS;
    
    CLASS.insert({"1", "엘리스"});
    CLASS["2"] = "브라운";

	...
}

삽입

1) insert({key, value}) 또는 insert(make_pair(key, value))

CLASS.insert({"1", "엘리스"});
CLASS.insert({"1", "마넬라"});	// 중복 키 허용x, 무시된다.

2) 대입 연산

CLASS["2"] = "브라운";
CLASS["2"] = "로빈";	// 중복 키 허용x, "로빈"으로 덮여쓰여짐.

접근

1) at(key)

CLASS.insert({"1", "엘리스"});
cout << CLASS.at("1") << endl;	// => 엘리스

CLASS.at("1") = "브라운";
cout << CLASS.at("1") << endl;	// => 브라운

룩업

1) find(key)

CLASS.insert({"1", "엘리스"});
CLASS.insert({"2", "브라운"});

// 해당 키를 가진 원소를 가리키는 반복자 반환
auto it = CLASS.find("1");
cout << it->first << " " << it->second << endl;	// => 1 엘리스
it++;
cout << it->first << " " << it->second << endl;	// => 2 브라운

삭제

1) erase(key) 또는 erase(반복자)

CLASS.insert({"1", "엘리스"});
CLASS.insert({"2", "브라운"});

cout << CLASS.size() << endl;	// => 2

// 삭제
CLASS.erase("1");	
cout << CLASS.size() << endl;	// => 1

// 삭제
// find 함수로 원소를 가리키는 반복자를 찾은 뒤 이를 전달
CLASS.erase(CLASS.find("2"));
cout << CLASS.size() << endl;	// => 2

begin(), end()

CLASS.insert({"1", "엘리스"});
CLASS.insert({"2", "브라운"});
CLASS.insert({"3", "마이콜"});

for(auto it = CLASS.begin(); it != CLASS.end(); it++){
    cout << it->first << " " << it->second << endl;
}

// => 1 엘리스
// => 2 브라운
// => 3 마이콜

0개의 댓글