错误 C2280 “std::_Uhash_compare<_Kty,_Hasher,_Keyeq>::_Uhash_compare(const std::_Uhash_compare<_Kty,_Hasher,_Keyeq> &)”: 尝试引用已删除的函数
报这个错误有可能是因为使用容器时没有自定义比较函数和哈希函数,可参考以下方法解决问题:
#include <iostream>
#include <string>
#include <unordered_set>
namespace {
class Student
{
public:
std::string name;
std::string id;
public:
bool operator ==(const Student& other) const
{
return this->name == other.name && this->id == other.id;
}
bool operator()(const Student& _Left, const Student& _Right) const
{
return _Left == _Right;
}
};
static size_t myHash(const Student& self) noexcept
{
static std::hash<std::string> hash_str;
return hash_str(self.name);
}
}
int main()
{
std::unordered_set<Student, decltype(&myHash)> unordered_setVec;
unordered_setVec.insert(Student());
return 0;
}