以unordered_set
为例,首先在cppreference中查看其模板定义:
可以看到Hash
类默认是std::hash<Key
,KeyEqual
类似,本文将Hash
以函数对象写出,将KeyEqual
以lambda写出。
class hashvec{
public:
size_t operator()(const vector<int> & vec) const {
return hash<int>()(vec[0]) + hash<int>()(vec[1]) + hash<int>()(vec[2]);
}
};
int main() {
unordered_set<vector<int>, hashvec, decltype([](const vector<int>& vec1,const vector<int>& vec2) -> bool{
if (vec1[0] == vec2[0] && vec1[1] == vec2[1] && vec1[2] == vec2[2]) {
return true;
}
return false;
})> tmpres;
}
如上图,定义了一个unrodered_set
,要注意的是:
- 函数对象类
hashvec
中,重载的()运算符是一个const函数 undordered_set
中的KeyEqual
接收一个类,因此需要用decltype
推断lambda的类型