簡體   English   中英

在C ++中使用向量對進行排序

[英]sorting using vector pair in c++

我正在使用向量對對要使用循環插入第一個和第二個元素的位置進行排序

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

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

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

如果我的計數相等,那么我想按它們在矢量中插入的順序打印第二個元素,

但它沒有發生。

有人可以告訴我為什么嗎?

來自std::sort

按升序對[first,last)范圍內的元素進行排序。 相等元素的順序不能保證得到保留。
1)使用operator <比較元素。

並從std::pair::operator<

3)如果lhs.first <rhs.first,則返回true。 否則,如果rhs.first <lhs.first,則返回false。 否則,如果lhs.second <rhs.second,則返回true。 否則,返回false。

如此有效地,sort比較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;
     }
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM