【问题标题】:C++ Sorting objects based on two data membersC++ 根据两个数据成员对对象进行排序
【发布时间】:2013-10-06 21:39:48
【问题描述】:

我知道您可以将用户定义的类插入到 std::vector 中,然后重载排序机制,以便它在特定数据成员上进行比较。但是,您将如何对std::vector<MyClass> 进行排序,其中MyClass 有两个数据成员,并且您想在第二个数据成员上添加“第二级”排序?那么对数据成员aa 相等的地方进行排序,然后对数据成员b 进行排序?

【问题讨论】:

  • 重载排序机制允许您在两个正在比较的对象上执行任意代码。您应该可以根据需要添加任意数量的“级别”。
  • 就像您对单个成员进行比较一样。我建议先学习如何做到这一点(SO上有多个关于此的问题),然后只需修改您编写的仿函数以比较第二个成员(如果第一个成员相等)。

标签: c++ sorting vector stl


【解决方案1】:

使用std::tuple 创建自定义比较器

    #include <tuple>
   //..    
    struct comp
    {
      bool operator()(const MyClass& lhs, const MyClass& rhs) const
      {
        return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b);
      }
    };

它将首先使用a,然后再使用b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2021-09-22
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多