c++ - unordered_set 通过 lambdas 自定义哈希
问题描述
我可以通过函子实现自定义哈希函数没问题。但是,当尝试编译此代码时
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);
这是一个演示。
推荐阅读
- javascript - '位置:固定'在 div 内的按钮上隐藏按钮
- mysql - mysql表命名为保留字不适用于junit HSQLDB
- ssis - 具有主键和外键的事实表
- firebase - 如何通过 firestore 中的 add() 将图像上传到自动生成的文档
- html - 如何使导航栏的元素居中
- mysql - Variable to replace %s for sql is not getting honored
- c++ - How to convert opencv Matx to Mat
- google-apps-script - Unexpected error while getting the method or property insert on object Apiary.dfareporting.ads
- flutter - How do I correctly implement a FutureBuilder in Flutter in this case?
- maven - 将资源目录包含到 Quarkus 目标输出中