순서 없는 관련 컨테이너(C++)
Unordered associative containers (C++)C++ 표준 라이브러리 |
---|
컨테이너 |
C 표준 라이브러리 |
프로그래밍 언어 C++에서 순서 없는 연관 컨테이너는 해시 테이블 배리언트를 구현하는 C++ 표준 라이브러리의 클래스 템플릿 그룹입니다.템플릿이므로 정수나 사용자 정의 클래스 등 임의의 요소를 저장하는 데 사용할 수 있습니다.다음 컨테이너는 C++ 표준의 현재 개정판에 정의되어 있습니다.unordered_set
,unordered_map
,unordered_multiset
,unordered_multimap
각 컨테이너는 요소에 가해진 구속조건에 따라 달라집니다.
순서가 지정되지 않은 연관 컨테이너는 C++ 표준 라이브러리의 연관 컨테이너와 유사하지만 제약 조건이 다릅니다.이름에서 알 수 있듯이 순서가 매겨지지 않은 연관 컨테이너의 요소는 순서가 매겨지지 않습니다.이는 해시를 사용하여 객체를 저장하기 때문입니다.컨테이너는 일반 연관 컨테이너처럼 반복할 수 있습니다.
역사
C++ 언어로 해시 테이블을 최초로 구현한 것은hash_map
,hash_set
,hash_multimap
,hash_multiset
Silicon Graphics(SGI) Standard Template Library(STL;[1] 표준 템플릿 라이브러리) 클래스 템플릿.그 유용성 때문에, 그것들은 나중에 C++ 표준 라이브러리의 다른 몇 가지 구현(GNU 컴파일러 컬렉션(GCC) libstdc+[2]와 MSVC(Visual C++) 표준 라이브러리)에 포함되었습니다.
그hash_*
클래스 템플릿이 C++ Technical Report 1(C++ TR1)에 제안되어 이름으로 승인되었습니다.unordered_*
나중에 C++ [4]규격의 C++11 개정판에 통합되었습니다.[3]구현은 Boost C++ 라이브러리에서도 이용할 수 있습니다.<boost/unordered_map.hpp>
를 클릭합니다.[5]
기능의 개요
컨테이너는 컨테이너 이름 뒤에 명명된 헤더에 정의됩니다. 예:unordered_set
헤더에 정의되어 있습니다.<unordered_set>
모든 컨테이너는 컨테이너 개념의 요구 조건을 충족합니다. 즉, 컨테이너 개념의 요구 조건을 충족합니다.begin()
,end()
,size()
,max_size()
,empty()
,그리고.swap()
방법들.
unordered_set (C++11) | unordered_map (C++11) | unordered_multiset (C++11) | unordered_multimap (C++11) | 묘사 | |
---|---|---|---|---|---|
(오디오) | (오디오) | (오디오) | (오디오) | 다양한 소스로 컨테이너 구성 | |
(파괴자) | (파괴자) | (파괴자) | (파괴자) | 집합 및 포함된 요소를 파괴합니다. | |
operator= | operator= | operator= | operator= | 컨테이너에 값을 할당합니다. | |
get_allocator | get_allocator | get_allocator | get_allocator | 요소에 대한 메모리 할당에 사용된 할당자를 반환합니다. | |
요소 액세스 | 없음 | at | 없음 | 없음 | 경계 검사를 사용하여 지정된 요소에 액세스합니다. |
없음 | operator[] | 없음 | 없음 | 경계 검사 없이 지정된 요소에 액세스합니다. | |
반복기 | begin | begin | begin | begin | 컨테이너의 선두로 반복기를 반환합니다. |
end | end | end | end | 컨테이너 끝으로 반복기를 반환합니다. | |
용량. | empty | empty | empty | empty | 컨테이너가 비어 있는지 확인합니다. |
size | size | size | size | 컨테이너의 요소 수를 반환합니다. | |
max_size | max_size | max_size | max_size | 컨테이너에서 가능한 최대 요소 수를 반환합니다. | |
수식자 | clear | clear | clear | clear | 내용을 클리어합니다. |
insert | insert | insert | insert | 요소를 삽입합니다. | |
emplace | emplace | emplace | emplace | 요소를 인플레이스(C++11)로 구성합니다. | |
emplace_hint | emplace_hint | emplace_hint | emplace_hint | 힌트를 사용하여 요소를 내부로 구성합니다(C++11). | |
erase | erase | erase | erase | 요소를 지웁니다. | |
swap | swap | swap | swap | 내용을 다른 컨테이너와 스왑합니다. | |
찾다 | count | count | count | count | 특정 키와 일치하는 요소의 수를 반환합니다. |
find | find | find | find | 특정 키를 가진 요소를 찾습니다. | |
equal_range | equal_range | equal_range | equal_range | 특정 키와 일치하는 요소의 범위를 반환합니다. | |
버킷 인터페이스 | ... | ||||
해시 정책 | ... | ||||
감시자들 | hash_function | hash_function | hash_function | hash_function | 키의 해시를 만드는 데 사용되는 함수를 반환합니다. |
key_eq | key_eq | key_eq | key_eq | 키 비교 함수를 반환합니다. |
사용 예
#실패하다 <iostream> #실패하다 <문자열> #실패하다 <unordered_map> 인트 주된() { 표준::unordered_map< >표준::스트링, 인트> 몇달.; 몇달.['1월'] = 31; 몇달.["2월"] = 28; 몇달.[행진곡] = 31; 몇달.['4월'] = 30; 몇달.["할 수 있다"] = 31; 몇달.["6월"] = 30; 몇달.["7월"] = 31; 몇달.["8월"] = 31; 몇달.['9월'] = 30; 몇달.["10월"] = 31; 몇달.['11월'] = 30; 몇달.['12월'] = 31; 표준::외치다 << > "9월 ->" << > 몇달.['9월'] << > 표준::끝; 표준::외치다 << > "4월 ->" << > 몇달.['4월'] << > 표준::끝; 표준::외치다 << > "12월 ->" << > 몇달.['12월'] << > 표준::끝; 표준::외치다 << > "2월 ->" << > 몇달.["2월"] << > 표준::끝; 돌아가다 0; }
커스텀 해시 함수
std::unordered_map에서 사용자 지정 개체를 사용하려면 사용자 지정 해시 함수를 정의해야 합니다.이 함수는 사용자 지정 유형을 항상 참조하고 size_t를 반환합니다.
#실패하다 <unordered_map> 구조 X{인트 i,j,k;}; 구조 해시_X{ size_t 교환입니다.()(컨스턴트 X &x) 컨스턴트{ 돌아가다 표준::해시< >인트>()(x.i) ^ 표준::해시< >인트>()(x.j) ^ 표준::해시< >인트>()(x.k); } };
사용자 정의 함수를 템플릿파라미터로 전달함으로써 std::unordered_map과 같이 사용할 수 있습니다.
표준::unordered_map< >X,인트,해시_X> my_map;
또는 std::hash 함수를 지정하여 기본 해시 함수로 설정할 수 있습니다.
네임스페이스 표준 { 템플릿 << 고객명 >>님 학급 해시< >X>{ 일반의 : size_t 교환입니다.()(컨스턴트 X &x ) 컨스턴트{ 돌아가다 해시< >인트>()(x.i) ^ 해시< >인트>()(x.j) ^ 해시< >인트>()(x.k); } }; } //... 표준::unordered_map< >X,인트> my_map;
레퍼런스
- ^ "hash_map<Key, Data, HashFcn, EqualKey, Alloc>". Silicon Graphics (SGI). Retrieved 26 January 2011.
- ^ "libstdc++: hash_map Class Template Reference". Retrieved 26 January 2011.
- ^ WG21 (9 April 2003). "A Proposal to Add Hash Tables to the Standard Library (revision 4)". n1456.
- ^ WG21 (21 August 2010), Working Draft, Standard for Programming Language C++ (PDF), n3126
- ^ "Class template unordered_map". Boost. Retrieved 26 January 2011.