直接将成员函数与unordered_set一起使用
Use member functions directly with unordered_set
将std::unordered_set
与实现operator==
和hash
的类一起使用有捷径吗?具体来说,有没有一种方法可以(1)避免创建一个独立的operator==(const Object& a, const Object& b)
函数,以及(2)避免定义一个完整的类来保存size_t operator()(const Object& o) const {return o.hash();}
当然,这两个都不是问题,我只是好奇。
-
被定义为成员函数的CCD_ 6已经得到满足。
-
如果用作键的类有一个成员函数
hash() const
,那么我们可以做一些简单的事情:
-
#include <unordered_map>
#include <string>
struct myclass {
std::size_t hash() const { return 0; }
bool operator==(const myclass& r) const { return true; }
};
struct self_hash
{
template<class T>
auto operator()(const T& r) const { return r.hash(); }
};
int main()
{
using mymap = std::unordered_map<myclass, std::string, self_hash>;
auto m = mymap();
}
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 为什么我无法更改"set<set>"循环中的值<int>
- 如何将C++中的库和头与MinGW一起使用
- 对于set上的循环-获取next元素迭代器
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 将 std::set 与基于键的比较器一起使用
- 如何将set和enum一起使用
- 如何将分配器与 std::set 一起使用?
- set 如何与唯一键一起工作,但在C++中具有等效的键值
- 将 set 方法与指针/类一起使用
- 不能将 std::iota 与 std::set 一起使用
- 为什么std::remove不能和std::set一起工作
- boost DFS不能与set垂直列表一起工作
- 将基于范围的 for 与 std::set<std::unique_ptr <T>一起使用>已删除函数
- 将用户定义的类型(structs)与set等容器类一起使用
- Std::string不能与Std::set一起工作