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/