c++ - 当我插入 map c++​​ 时,为什么不调用小于运算符?

标签 c++ dictionary operators overloading

class Board {
public:

  virtual void init() = 0;
  virtual void print_board() const = 0;
  virtual Board* clone() const = 0;
  virtual bool less_than(const Board& b2) const = 0;
  inline friend bool operator< (const Board& b1, const Board& b2);
};

inline bool operator< (const Board& b1, const Board& b2){
  std::cout<<"TEST1"<<std::endl;
  return b1.less_than(b2);
}

当我使用 mymap[board] = evaluate; 插入时,Test1 根本没有被打印出来; map 是map<Board*, int> .

最佳答案

它正在调用 operator<(Board*, Board*) ,它只是比较指针。将您的 map 构建为 map<Board, Board> - 或者创建一个仿函数来比较两个映射指针并将其用作模板参数:

struct compareBoards {
    bool operator()(Board const * b1, Board const * b2) const {
        return *b1 < *b2; }
}

map<Board*, int, compareBoards> boardMap;

关于c++ - 当我插入 map c++​​ 时,为什么不调用小于运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9628284/

相关文章:

c# - 如何将数组转换为字典

c# 如何检查 QueryString Values 计数是否与键计数具有相同的值

python - 除以字典中的值 (Python)

javascript - 使用 == 而不是 === 时的类型转换

c++ - 更改类中的变量值并将所有变量传递给新值以供进一步使用

c++ - 我应该返回 const 对象吗?

c++ - Valgrind 错误 - 无法执行二进制文件

c++ - 如果我们关闭主应用程序,以 QProcess 启动的进程不会退出

delphi - 为什么将 varEmpty 与零评估的 varInteger 进行比较时 "="运算符结果为 True?

python - 编辑 boolean 值和运算符