【问题标题】:C++ STL - Inserting a custom class as a mapped valueC++ STL - 将自定义类作为映射值插入
【发布时间】:2013-05-10 04:21:59
【问题描述】:

我有一堂课:

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

如何将怪物实例放入怪物地图?我添加了所有运算符重载只是为了插入,但它不起作用!

【问题讨论】:

  • 为什么说“win32”?与此无关。
  • 我遇到了这个问题,您找到解决方案了吗?此页面上发布的解决方案对我不起作用。

标签: c++ stl


【解决方案1】:

简单的方法是

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

运算符重载是不必要的,您确实需要为地图的 key 重载运算符

【讨论】:

  • 啊!当然!它总是简单的事情。谢谢!
  • @BrianGradin 我应该补充一点,第一个示例确实需要 Monster 具有默认构造函数,而发布的代码中并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多