순서 없는 관련 컨테이너(C++)

Unordered associative containers (C++)

프로그래밍 언어 C++에서 순서 없는 연관 컨테이너는 해시 테이블 배리언트를 구현하는 C++ 표준 라이브러리의 클래스 템플릿 그룹입니다.템플릿이므로 정수나 사용자 정의 클래스 등 임의의 요소를 저장하는 데 사용할 수 있습니다.다음 컨테이너는 C++ 표준의 현재 개정판에 정의되어 있습니다.unordered_set,unordered_map,unordered_multiset,unordered_multimap각 컨테이너는 요소에 가해진 구속조건에 따라 달라집니다.

순서가 지정되지 않은 연관 컨테이너는 C++ 표준 라이브러리의 연관 컨테이너와 유사하지만 제약 조건이 다릅니다.이름에서 알 수 있듯이 순서가 매겨지지 않은 연관 컨테이너의 요소는 순서가 매겨지지 않습니다.이는 해시를 사용하여 객체를 저장하기 때문입니다.컨테이너는 일반 연관 컨테이너처럼 반복할 수 있습니다.

역사

C++ 언어로 해시 테이블을 최초로 구현한 것은hash_map,hash_set,hash_multimap,hash_multisetSilicon 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; 

레퍼런스

  1. ^ "hash_map<Key, Data, HashFcn, EqualKey, Alloc>". Silicon Graphics (SGI). Retrieved 26 January 2011.
  2. ^ "libstdc++: hash_map Class Template Reference". Retrieved 26 January 2011.
  3. ^ WG21 (9 April 2003). "A Proposal to Add Hash Tables to the Standard Library (revision 4)". n1456.
  4. ^ WG21 (21 August 2010), Working Draft, Standard for Programming Language C++ (PDF), n3126
  5. ^ "Class template unordered_map". Boost. Retrieved 26 January 2011.