c++ less 运算符重载,使用哪种方式?

2024-03-26

例如:在 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;
      }

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


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

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

  1. 它不一定是一个friend.
  2. lhs不一定是Record
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ less 运算符重载,使用哪种方式? 的相关文章

随机推荐