繁体   English   中英

将自定义类插入unordered_map c ++

[英]insert custom class into unordered_map c++

我有一个问题,可能有一个简单的解决方案,但我已经看了一会儿,仍然没有成功。

我有一个简单的类如下:

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

双参数插入方法 insert(key_type, mapped_type)匹配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应该是公共的。

你有几个错误。 首先, operator()MyHashprivate ,因为它是一个类,类的默认访问是私有的。 将其标记为public或将其更改为struct MyHash

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM