在c ++中使用向量对进行排序

时间:2018-03-26 11:15:00

标签: c++

我正在使用向量对来排序我使用循环插入第一个和第二个元素的位置

vect.push_back(make_pair(count[i],arr[i]));

sort(vect.begin(),vect.end());

cout<<vect[i].second<<" ";

如果我的计数相等,那么我想按照它们插入向量中的顺序打印第二个元素,

但它没有发生。

有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:5)

来自std::sort

  

按升序对[first,last]范围内的元素进行排序。 不保证保留相等元素的顺序。
  1)使用运算符&lt;。

比较元素

std::pair::operator<

  

3)如果lhs.first&lt; rhs.first,返回true。否则,如果rhs.first&lt; lhs.first,返回false。否则,如果lhs.second&lt; rhs.second,返回true。否则,返回false。

如此有效,排序比较count[i],如果其中两个相等,则会比较arr[i]

如果您只想比较count并保留相等键的原始订单,则必须使用std::stable_sort(first, last, comp)

  

按升序对[first,last]范围内的元素进行排序。 保证保留相等元素的顺序。

使用适当的比较运算符

std::stable_sort(vect.begin(), vect.end(),
     [](const std::pair<int, T> &x, const std::pair<int, T> &y) {
        return x.first < y.first;
     }
);