在使用map等关联式容器时,用结构体作为键时,在用到键比较的场合时会报错,键无法比较。
比如:
- map每次插入新元素都需要比较键,自动排序。(哪怕用unordered_map插入不排序,其底层也是用哈希表储存,需要计算映射,也会报错)
- map.count(key)对某一键计数。
因为键是我们自定义的,编译器找不到类似模板,无法比较。我们自己重载<运算符即可,指出我们在比较结构体时具体是比较哪个成员变量。
struct Test{
string data;
int x;
bool operator<(const Test &tmp) const{//重载运算符<
if(this->data < tmp.data)return true;
else return false;
}
};