(1) 重载map的compare
map的定义为
map<Key, T, Compare, Allocator>
昨天想重载Compare, 使得在一个以pair<int, int>作为key的map中, <x, y>与<y, x>能被认为是相同的key。 函数在逻辑上很容易实现,但是程序一直编译不过。后来参照网上的资料,发现了几个问题:
#include <iostream>
#include <map>
using namespace std;
class compare{
public:
inline bool operator()(const pair<int, int>& p1, const pair<int, int>& p2)const{
int left1 = p1.first > p1.second ? p1.first : p1.second;
int left2 = p1.first < p1.second ? p1.first : p1.second;
int right1 = p2.first > p2.second ? p2.first : p2.second;
int right2 = p2.first < p2.second ? p2.first : p2.second;
if(left1 < right1)
return true;
else if(left1 == right1 && left2 < right2)
return true;
else return false;