在C ++中创建地图并将自定义类元素插入其中

时间:2019-02-14 15:12:17

标签: c++ dictionary hash

我想创建一个使用我的自定义类作为键和元素的地图。但是,插入时出现错误。我在这里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,

我想我需要定义一个自定义哈希函数,对吗?我该怎么办?

0 个答案:

没有答案