basic_string_hash
basic_string_hash (basic_string 해시 지원)
이 페이지는 std::hash가 std::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가 대응하는 문자열 뷰 타입이며, s가 S 타입의 객체라면, 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) |
문자열 뷰에 대한 해시 지원 (클래스 템플릿 특수화) |