shared_ptr_hash
shared_ptr_hash (std::hashstd::shared_ptr)
<memory> 헤더에 정의되어 있어요. std::shared_ptr<T>에 대한 std::hash의 특수화로, std::shared_ptr<T> 타입 객체의 해시를 얻을 수 있게 해줘요. C++11부터 도입됐어요.
출처: cppreference
본문
template< class T >
struct hash<std::shared_ptr<T>>;
(C++11부터)
std::shared_ptr<T>에 대한 std::hash의 템플릿 특수화는 사용자가 std::shared_ptr<T> 타입 객체의 해시를 얻을 수 있게 해줘요.
주어진 std::shared_ptr<T> p에 대해, 이 특수화는 std::hash<std::shared_ptr<T>>()(p) == std::hash<decltype(p.get())>()(p.get())를 보장해요. 즉 shared_ptr의 해시는 그 저장된 포인터의 해시와 같아요.
std::unordered_set<std::shared_ptr<int>> s; // 기본 hash 사용 가능
std::shared_ptr<int> p = std::make_shared<int>(42);
std::size_t h = std::hash<std::shared_ptr<int>>{}(p); // p.get() 의 해시와 동일
이 특수화 덕분에 shared_ptr를 std::unordered_map/std::unordered_set의 키로 쓸 수 있어요.