basic_string_hash

basic_string_hash (basic_string 해시 지원)

이 페이지는 std::hashstd::basic_string 및 그 파생 문자열 클래스들에 대해 제공하는 템플릿 특수화를 설명해요. 이 특수화를 통해 사용자는 문자열 객체의 해시 값을 얻을 수 있어요. C++11부터 사용할 수 있으며, C++17부터는 대응하는 std::basic_string_view의 해시와 동일한 결과를 보장해요.

출처: cppreference

본문

특수화 (Specializations)

<string> 헤더에 정의됨
template < class A > struct hash < std :: basic_string < char , std :: char_traits < char > , A >> ; (1) (since C++11)
template < class A > struct hash < std :: basic_string < char16_t , std :: char_traits < char16_t > , A >> ; (2) (since C++11)
template < class A > struct hash < std :: basic_string < char32_t , std :: char_traits < char32_t > , A >> ; (3) (since C++11)
template < class A > struct hash < std :: basic_string < wchar_t , std :: char_traits < wchar_t > , A >> ; (4) (since C++11)
template < class A > struct hash < std :: basic_string < char8_t , std :: char_traits < char8_t > , A >> ; (5) (since C++20)

std::hash의 다양한 문자열 클래스에 대한 템플릿 특수화는 사용자가 문자열의 해시를 얻을 수 있게 해줘요.

이 해시들은 대응하는 std::basic_string_view 클래스의 해시와 같아요. S가 이러한 문자열 타입 중 하나이고, SV가 대응하는 문자열 뷰 타입이며, sS 타입의 객체라면, std::hash<S>()(s) == std::hash<SV>()(SV(s))가 성립해요. (since C++17)

예제 (Example)

다음 코드는 문자열에 사용된 해시 함수의 가능한 출력 중 하나를 보여줘요.

#include <functional>
#include <iostream>
#include <memory_resource>
#include <string>
#include <string_view>
using namespace std::literals;
 
int main()
{
    auto sv = "Stand back! I've got jimmies!"sv;
    std::string s(sv);
    std::pmr::string pmrs(sv); // use default allocator
 
    std::cout << std::hash<std::string_view>{}(sv) << '\n';
    std::cout << std::hash<std::string>{}(s) << '\n';
    std::cout << std::hash<std::pmr::string>{}(pmrs) << '\n';
}

가능한 출력:

3544599705012401047
3544599705012401047
3544599705012401047

결함 보고 (Defect reports)

다음의 동작을 변경하는 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.

DR 적용 대상 발표된 동작 올바른 동작
LWG 3705 C++11 사용자 정의 할당기를 사용하는 std::basic_string에 대한 해시 지원이 활성화되지 않았음 활성화됨

같이 보기 (See also)

항목 설명
hash (C++11) 해시 함수 객체 (클래스 템플릿)
std::hash <std::string_view> (C++17), std::hash <std::wstring_view> (C++17), std::hash <std::u8string_view> (C++20), std::hash <std::u16string_view> (C++17), std::hash <std::u32string_view> (C++17) 문자열 뷰에 대한 해시 지원 (클래스 템플릿 특수화)

더 알아보기 (Learn more)

cppreference