如何按第二个元素对向量对进行降序排序?

Ang*_*ala 2 c++ sorting std-pair

我正在应对编程挑战,在提出问题之前我已经看过这个主题:

对向量的元素进行排序,其中每个元素是一对[重复]

如何根据对的第二个元素对向量对进行排序?

情况是这样的:

-我有我的向量对:vector< pair<int, int> > rank;

-我已经实现了一个谓词来按第二个元素并按降序对成对的向量进行比较和排序:

struct predicate
{
    bool operator()(const std::pair<int, int> &left, const std::pair<int, int> &right) 
    {
         return left.second < right.second;
    }
}

sort(rank.rbegin(), rank.rend(), predicate());
Run Code Online (Sandbox Code Playgroud)

编程挑战将为第二个元素提供重复的值,在这种情况下,我必须将第一个元素按其插入向量对的时间排序,例如:

电压
1 3
2 4
4 5
33 3

排序必须是:

4 5
2 4
1 3
33 3

当我用我设计的测试用例测试我的解决方案时,问题就出现了:

电压
1 2
16 3
11 2
20 3
18 2
39 39
23 22
12 19
123 4
145 6
3 5
26 4
9574 4
7 1
135 5
193 99
18237 3
22 4
1293 3
3471 33

对向量进行排序后,输出应该是这样的:

193 99
39 39
3471 33
23 22
12 19
145 6
3 5
135 5
123 4
26 4
9574 4
22 4
16 3
20 3
18237 3
1293 3
1 2
11 2
18 2
7 1

但取而代之的是,我也得到了一些按第一个值排序的元素:

193 99
39 39
3471 33
23 22
12 19
145 6
3 5
135 5
123 4
26 4
9574 4
22 4
20 3 -> 已更改的元素
16 3 -> 已更改的元素
18237 3
1293 3
18 2 ->改变的元素
11 2
1 2 -> 改变的元素
7 1

为什么会出现这样的情况??我究竟做错了什么??帮助将不胜感激

hei*_*chj 5

std::sort 不保证“相等”元素的顺序保持不变。为此,您需要 std::stable_sort。在这种情况下,“等于”是指两个元素 a 和 b,其中

!((a < b) || (b < a))
Run Code Online (Sandbox Code Playgroud)