例如:在 C++ 头文件中,如果我定义了struct Record
我想用它进行可能的排序,以便我想重载less operator
。以下是我在各种代码中注意到的三种方法。我粗略地注意到:如果我要放Record
into a std::set
, map
, priority_queue
, ... 容器,版本 2 可以工作(可能版本 3 也可以);如果我要拯救Record
into a vector<Record> v
然后打电话make_heap(v.begin(), v.end())
等等..那么只有版本 1 有效。
struct Record
{
char c;
int num;
//version 1
bool operator <(const Record& rhs)
{
return this->num>rhs.num;
}
//version 2
friend bool operator <(const Record& lhs, const Record& rhs) //friend claim has to be here
{
return lhs->num>rhs->num;
}
};
在同一个头文件中,例如:
//version 3
inline bool operator <(const Record& lhs, const Record& rhs)
{
return lhs->num>rhs->num;
}
基本上,我想在这里提出问题,看看是否有人能提出一些总结,这三种方法之间有什么区别,每个版本的正确位置是什么?
它们本质上是相同的,除了第一个是非常量并且允许您修改自身之外。
我更喜欢第二个,原因有两个:
- 它不一定是一个
friend
.
-
lhs
不一定是Record
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)