我正在看这个。作者首先operator<()在my_data中定义并表示“一切正常”。添加成员变量后,他说“operator<()并没有真正实现比较操作”。我想知道两者有什么区别,为什么前者是错误的?
struct my_data
{
std::string key;
std::string value;
//first
bool operator<(const my_data data)const {
return key < data.key;
}
};
//second
struct Compare
{
bool operator()(const my_data& l, const my_data& r)
const {
return l.key < r.key;
}
};
Run Code Online (Sandbox Code Playgroud)
从那里
和
struct my_data
{
std::string key;
std::string value;
//first
bool operator<(const my_data data)const {
return key < data.key;
}
};
std::set<my_data> data;
Run Code Online (Sandbox Code Playgroud)
您可以将类与 a 一起使用std::set,但您operator <没有使用所有对象,它只是比较单个字段。这就是视频作者所抱怨的。他们认为它只比较对象的一个字段,而不是对象的整个状态。通过切换到
struct my_data
{
std::string key;
std::string value;
};
struct Compare
{
bool operator()(const my_data& l, const my_data& r)
const {
return l.key < r.key;
}
};
std::set<my_data, Compare> data;
Run Code Online (Sandbox Code Playgroud)
不再是“说谎” operator <,而是一个自定义比较器,可以只比较您想要的内容。