自定义unordered_set类型
1.1 方法一定义哈希函数和判等函数,小括号中1表示最小bucket值。
#include <iostream>
#include <unordered_set>
using namespace std;
struct Str
{
int x;
};
size_t MyHash(const Str& val)
{
return val.x;
}
bool MyEqual(const Str& val1, const Str& val2)
{
return val1.x==val2.x;
}
int main()
{
unordered_set<Str,decltype(&MyHash), decltype(&MyEqual)> s(1, MyHash, MyEqual);
s.insert(Str{3});
for(auto a=s.begin(); a!=s.end();a++)
{
cout<<(*a).x<<endl;
}
}
1.2 输出结果
3
2.1 方法二运算符重载,使用缺省的方式构建
#include <iostream>
#include <unordered_set>
using namespace std;
struct Str
{
int x;
bool operator==(const Str& t)const
{
return (this->x ==t.x);
}
};
class MyHash
{
public:
size_t operator()(const Str&t) const
{
return t.x;
}
};
int main()
{
unordered_set<Str, MyHash> s;
s.insert(Str{3});
for(auto a=s.begin(); a!=s.end();a++)
{
cout<<(*a).x<<endl;
}
}
2.2 输出结果
3