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
为什么会出现这样的情况??我究竟做错了什么??帮助将不胜感激
std::sort 不保证“相等”元素的顺序保持不变。为此,您需要 std::stable_sort。在这种情况下,“等于”是指两个元素 a 和 b,其中
!((a < b) || (b < a))
Run Code Online (Sandbox Code Playgroud)