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

标签 c++ stl operator-overloading

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

相关文章:

c++ - "main.exe"出现崩溃错误

c++ - 为什么 while(std::ifstream >> s) 有效?

c++ - 无法使用模板编译 std::list 迭代器

c++ - valarray 复杂度

c++ - 运算符重载 - 动态对象分配问题

c++ - 在哪里释放函数重载运算符中分配的内存

c++ - 在 c 程序和 C++ Qt 应用程序之间使用什么 Linux IPC?

c++ - CFile读取数据到缓冲区

c++ - MFC 静态链接未解析的外部符号

c++ - 调用子插入运算符