2013-05-10 85 views
0

我有一个类:C++ STL - 插入的自定义类作为映射值

class Monster : public Player 
{ 
public: 
    // Copy constructor - used for populating monster list in Game class 
    Monster(int newType) 
    { 
     type = newType; 
     canmove = true; 
     notforward = false; 
    } 

    int type; 

    bool operator==(const Monster& m) const {return type == m.type;} 
    bool operator!=(const Monster& m) const {return type != m.type;} 
    bool operator< (const Monster& m) const {return type < m.type;} 
    bool operator<=(const Monster& m) const {return type <= m.type;} 
    bool operator> (const Monster& m) const {return type > m.type;} 
    bool operator>=(const Monster& m) const {return type >= m.type;} 
}; 

某些变量(如canmove和notforward)继承。接着,在不同的类中创建地图的怪物:

map<pair<int, int>, Monster> monsters; // Pair used for x and y coordinate 

monsters.insert(make_pair(10, 10), Monster(10)); 
// Error - No instance of overloaded function 

如何,我可以得到怪物实例到怪物的地图?我添加了所有的运算符重载,以便能够插入,但它不起作用!

+0

这是为什么说“win32”?它与此无关。 – asveikau 2013-05-10 05:11:24

+0

好点。编辑。 – 2013-05-10 05:26:50

回答

0

简单的方法是

monsters[make_pair(10, 10)] = Monster(10); 

另一种方式是

monsters.insert(make_pair(make_pair(10, 10), Monster(10))); 

又是

monsters.insert(map<pair<int, int>, Monster>::value_type(make_pair(10, 10), Monster(10))); 

的操作符重载是不必要的,你确实需要重载operator <为关键的地图,但不是v ALUE。我想你可能会感到困惑,因为在第二种情况下需要两个make_pair调用。

+0

啊!当然!这总是很简单的事情。谢谢! – 2013-05-10 04:26:09

+0

@BrianGradin我应该补充说,第一个例子确实需要Monster有一个默认的构造函数,这在发布的代码中并非如此。 – john 2013-05-10 04:35:08