在使用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;
}
};
本文介绍了在C++中使用结构体作为map键时遇到的问题,即编译器无法自动进行键的比较。为解决此问题,我们需要重载结构体的`<`运算符,明确指定比较的成员变量。例如,通过重载`bool operator<(const Test& tmp) const`方法,使结构体Test可以根据data成员进行比较。这使得map在插入和查找时能正确地依据自定义规则进行操作。
765

被折叠的 条评论
为什么被折叠?



