【问题标题】:How can I sort a vector containing pair<int,int> elements? Sorting is done as per the compare function如何对包含 pair<int,int> 元素的向量进行排序?根据比较功能进行排序
【发布时间】:2013-11-05 17:43:22
【问题描述】:
typedef pair<int,int>ii;
vector<ii>vii;

sort(vii.begin(),vii.end(),comp);

 ii comp(ii a,ii b){
   if(a.first>b.first)
   return a;
   else if(a.first==b.first){
    if(a.second>b.second)
    return a;
    else
    return b;
   }
   else{
    return b;
   }
 }

//这样会抛出编译错误。你能指导如何根据比较函数中给出的条件对这个向量进行排序吗?

【问题讨论】:

  • 您需要更详细地描述您遇到的错误,最好包含SSCCE
  • 通常,比较函数返回一个布尔值,表明两个传递的值之间存在特定关系。它们通常不会返回传入的值之一(您所拥有的看起来更像是 max() 函数的近似值,而不是比较器)。

标签: c++ sorting vector stl


【解决方案1】:

大概你想按字典顺序,按升序对它们进行排序。你可以这样做:

std::sort(vii.begin(), vii.end(), std::greater<std::pair<int,int>>());

比较函子是一个二元谓词,必须返回一个布尔值,并实现strict weak orderingstd::greater&lt;std::pair&lt;int,int&gt;&gt; 为你做这件事。

【讨论】:

  • 值得一提的是,您提供给sort 的比较函数必须返回bool,而不是较大的元素。
  • @AlexReinking 正确,我正在添加那个。
  • 它抛出一个错误。在函数'int main()'中:|错误:嵌套模板参数列表中的“>>”应该是“> >”|
  • @AmitKumar 您可以将&gt;&gt; 替换为&gt; &gt;,或者在C++11 模式下编译。我假设一个 C++11 编译器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2015-09-03
相关资源
最近更新 更多