我想创建一个使用我的自定义类作为键和元素的地图。但是,插入时出现错误。我在这里C++ STL - Inserting a custom class as a mapped value找到了与我的问题有关的帖子。但是提出的解决方案对我没有帮助。
/*
* Structure for a coordinate
* This is the custom class that I created
*/
class Coord{
public:
int x, y;
public:
Coord(int x1, int y1) {
x = x1;
y = y1;
}
int getX(void) {
return x;
}
int getY(void) {
return y;
}
};
/*
* I attempted to create a map<Coord, Coord>
* and attempted to insert Coord values in. I get
* compile time error
*/
map<Coord, Coord> came_from;
came_from.insert(Coord(0,0), Coord(5,5));
我收到此错误。
invalid operands to binary expression ('Coord' and 'Coord')
for (const_iterator __e = cend(); __f != __l; ++__f)
~~~ ^ ~~~
这是什么意思?
编辑1
实际上,顺序对我来说并不重要,所以我认为在这种情况下,unordered_map更合适。
我更改为unordered_map,并按照注释中的建议使用了emplace。下面的新代码:
unordered_map<Coord, Coord> came_from;
came_from.emplace(Coord(0,0), Coord(0,0));
我收到一个错误,指示哈希函数不符合要求。以下是确切的错误消息。
static_assert failed due to requirement '__check_hash_requirements<__hash_value_type<Coord, Coord>,
int>::value' "the specified hash does not meet the Hash requirements"
static_assert(__check_hash_requirements<_Key, _Hash>::value,
我想我需要定义一个自定义哈希函数,对吗?我该怎么办?