使用结构体作为map的key时,一定要重载那个结构体的<运算符,否则报错(map根据重载的<符号来区分各个key,因此,重载<时一定要保证标识结构体的属性集合一定要全部重载到<中)
例子:
typedef struct ma
{
public:
nod left;
nod right;
int now;
bool operator < (const ma &other) const
{
if ((now<other.now)
||(now==other.now&&left.status[0]<other.left.status[0])
||(now==other.now&&left.status[0]==other.left.status[0]&&left.status[1]<other.left.status[1])
||(now==other.now&&left.status[0]==other.left.status[0]&&left.status[1]==other.left.status[1]&&left.status[2]<other.left.status[2])
)
{
return true;
}
return false;
}
};
注意:如果重载<时不把status[0,1,2]重载进去,那么map只根据重载中的now来区分key。会导致本来不一样的key变成一样的,出现bug。