在只有 const shared_ptr 的 unordered_set 中找到一个 shared_ptr?

Find a shared_ptr in an unordered_set with only a const shared_ptr?

我有一个 unordered_set<shared_ptr<T>> us,我想知道 k 是否在 us 中,但是 k 的类型是 shared_ptr<T const>,所以 unordered_set<shared_ptr<T>>::find 抱怨无法转换。

有办法解决这个问题吗?也许通过直接提供哈希?

我确实尝试了 const_cast(感觉很脏),但没有成功。

这里使用 std::const_pointer_cast 是一个可能的解决方案。

us.find(std::const_pointer_cast<T>(k));

由于您没有修改 k,因此可以丢弃常量。