Я хотел бы найти значение в unordered_set, но не удалось:Найти значение в качестве unordered_set из shared_ptr
typedef std::shared_ptr<int> IntPtr;
std::unordered_set<IntPtr> s;
s.insert(std::make_shared<int>(42));
bool found = s.find(std::make_shared<int>(42)) != s.end();
cout<<std::boolalpha<<found<<endl; // false
попытался следующие, но до сих пор не работает.
namespace std {
template <> struct hash<IntPtr> {
size_t operator()(const IntPtr& x) const noexcept {
return std::hash<int>()(*x);
}
};
}
Любая идея, как это сделать?
Вы должны понимать, что это значит для двух указателей общими, чтобы быть «равным». –
Вы не должны специализироваться на 'std :: hash' не для ** вашего ** типа ... – Jarod42
Операторы сравнения для' shared_ptr' сравнивать значения указателя; фактические объекты, на которые указывает, не сравниваются. – dasblinkenlight