gpt4 book ai didi

c++ less 运算符重载,用什么方法?

转载 作者:IT老高 更新时间:2023-10-28 22:22:04 26 4
gpt4 key购买 nike

例如:在 C++ 头文件中,如果我定义了 struct Record我想将它用于可能的排序,以便我想重载 less operator .以下是我在各种代码中注意到的三种方式。我大致注意到:如果我要输入 Record变成 std::set , map , priority_queue , ... 容器,版本 2 可以工作(可能版本 3 也是如此);如果我要保存 Record变成 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;
}

基本上,我想在这里提出问题,看看是否有人可以总结一下这三种方法之间的区别以及每个版本的正确位置是什么?

最佳答案

它们本质上是相同的,除了第一个是非常量并且允许您修改自身。

我更喜欢第二个原因有两个:

  1. 不一定是 friend
  2. lhs 不必是 Record

关于c++ less 运算符重载,用什么方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8016880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com