【问题标题】:sorting a vector according to some attribute in it根据其中的某些属性对向量进行排序
【发布时间】:2015-11-16 13:18:08
【问题描述】:

如果我有以下向量:

vector< pair < pair< char,int >,pair< int,int > > >

如何使用&lt;algorithm&gt; 库根据第一对中的整数部分进行降序排序? (我想用sort(vector.begin() , vector.end() )

【问题讨论】:

  • "我有以下向量:vector&lt; pair&lt; char,int &gt;,pair&lt; int,int &gt; &gt;" 不,你没有。那不是一个有效的类型。显示您的实际声明。
  • vector &lt;pair&lt;pair&lt;char,int&gt;,pair&lt;int,int&gt; &gt; &gt; buy; 这正是我的声明
  • 哦,在你的问题中再添加一个pair :)
  • 我已经这样做了.. 不知道是否有人可以提供帮助:)

标签: c++ algorithm sorting vector stdvector


【解决方案1】:
using MyVector = vector< pair < pair< char,int >,pair< int,int > > >;
MyVector v;
std::sort(v.begin(), v.end(),
    [](const MyVector::value_type& a, const MyVector::value_type& b) {
      return a.first.second > b.first.second;
    }
);

【讨论】:

    【解决方案2】:
    std::sort( v.begin(), v.end(), 
        []( const auto &p1, const auto &p2 ) { return p1.first.second > p2.first.second; } );  
    

    如果您的编译器不支持 lambda 表达式中的 auto,那么您必须明确指定向量元素的类型,例如使用 typedef。

    【讨论】:

      【解决方案3】:

      我觉得你可以参考this link

      sort(mMyClassVector.begin(), mMyClassVector.end(), 
          [](const MyClass & a, const MyClass & b) -> bool
      { 
          return a.mProperty > b.mProperty; 
      });
      

      当您从向量中获取两个对象时,使用 lambda 并定义应该是 '>'。

      【讨论】:

      • 请将该链接中的相关部分添加到您的答案中。仅链接的答案将被删除。随着时间的推移,链接会变得陈旧。
      • @chr 没问题。我刚刚添加了它。
      猜你喜欢
      • 2010-10-04
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2020-11-22
      • 2011-05-27
      • 1970-01-01
      • 2013-03-25
      • 2011-01-23
      相关资源
      最近更新 更多