关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单应用

unordered_set为例,首先在cppreference中查看其模板定义:
image
可以看到Hash类默认是std::hash<KeyKeyEqual类似,本文将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的类型
  • 两个函数内部都不应该改变vec的值,因此参数都需要是const
posted @ 2024-07-03 19:29  SanFranciscoo  阅读(0)  评论(0编辑  收藏  举报