我可以通过函子实现自定义哈希函数,没问题。但是,当尝试编译此代码时
class Student {
public:
string fname;
string lname;
Student(string f, string l) : fname(f), lname(l) {}
};
int main()
{
Student a("John", "Doe");
auto StudentHash = [](const Student& obj) -> const size_t
{return (std::hash<string>()(obj.fname) ^ std::hash<string>()(obj.lname)); };
auto StudentEqual = [](const Student& lhs, const Student& rhs) -> const bool
{return (lhs.fname == rhs.fname && lhs.lname == rhs.lname);};
unordered_set<Student, decltype(StudentHash), decltype(StudentEqual)> st;
st.insert(a);
}
我收到以下错误:
Error C2280 'main::<lambda_a8a8645443a5445869be61b46baaf9d3>::<lambda_a8a8645443a5445869be61b46baaf9d3>(void)': attempting to reference a deleted function
为什么会这样?
您需要向Hash
的构造函数提供KeyEqual
和unordered_set
对象,如下所示:
unordered_set<Student, decltype(StudentHash), decltype(StudentEqual)> st(0, StudentHash, StudentEqual);
这里是demo。