我有一个班级:
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 :(得分: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)));
运算符重载是不必要的,您需要重载运算符&lt;对于地图的键而不是值。我想也许你感到困惑,因为在第二种情况下需要两次调用make_pair。