Почему оператор «меньше» вызывается, когда я вставляю в карту c ++? - PullRequest
0 голосов
/ 09 марта 2012
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);
}

Test1 вообще не печатается, когда я вставляю с использованием mymap [board] = define; Карта map<Board*, int>.

1 Ответ

5 голосов
/ 09 марта 2012

Он вызывает operator<(Board*, Board*), который просто сравнивает указатели. Либо создайте карту как map<Board, Board> - либо создайте функтор для сравнения двух указателей карты и используйте его в качестве параметра шаблона:

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

И

map<Board*, int, compareBoards> boardMap;
...