2

我有一个问题,可能有一个简单的解决方案,但我环顾了一段时间,仍然没有成功。

我有一个简单的类如下:

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);
4

2 回答 2

10

两个参数插入方法都不匹配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应该是公开的。
于 2013-03-15T06:53:01.577 回答
0

你有几个错误。首先,它operator()是一个类,并且类的默认访问权限是私有的。将其标记为或更改为。privateMyHashpublicstruct MyHash

其次,您不能插入这样的值。它需要类似于my_items.insert(std::make_pair(Node(33), 894));

于 2013-03-15T06:56:56.877 回答