我有一个问题,可能有一个简单的解决方案,但我已经看了一会儿但仍然没有成功。
我有一个简单的课程如下:
class Node{
public:
int value;
bool visited;
Node(int argvalue) {value = argvalue;visited = false; }
bool operator==(const Node& n) {return (value == n.value);}
};
class MyHash {
size_t operator()(const Node& x) const { return std::hash<int>()(x.value); }
};
现在,当我尝试插入时,我收到错误,无法理解为什么?我是否错误地实现了哈希函数,或者是等于运算符==不够?
unordered_map<Node, int, MyHash> my_items;
my_items.insert(Node(33), 894);
答案 0 :(得分:9)
two-parameter insert methods没有匹配insert(key_type, mapped_type)
,这就是您正在尝试的内容。
地图包含std::pair<const Key, T>
,因此您需要明确地插入一对:
my_items.insert(std::make_pair(Node(33), 894));
或使用大括号初始化:
my_items.insert({Node(33), 894});
您可以使用std::unordered_map::emplace成员函数,它允许您传递一对的构造函数参数:
my_items.emplace(Node(33), 894);
其他事项:
bool Node::operator==
应为const(比较不应更改要比较的对象)size_t MyHash::operator()(...) const
应公开。答案 1 :(得分:0)
你有几个错误。首先,operator()
中private
为MyHash
,因为它是一个类,类的默认访问权限是私有的。将其标记为public
或将其更改为struct MyHash
。
其次,你不能插入那样的值。它需要像my_items.insert(std::make_pair(Node(33), 894))
;