为什么可以't过载运算符<()实现比较功能

  • 本文关键字:运算符 功能 比较 实现 c++
  • 更新时间 :
  • 英文 :


我在看这个。作者首先在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 <,而是一个自定义比较器,用于比较您想要的内容。

最新更新