我在看这个。作者首先在my_ data中定义了CCD_;一切正常";。在添加成员变量后,他说";运算符<((并没有真正实现比较操作";。我想知道两者之间有什么区别,为什么前者是错误的?
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;
}
};
从那里
使用
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;
您可以将类与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;
不再有";撒谎;operator <
,而是一个自定义比较器,用于比较您想要的内容。