【发布时间】:2021-11-04 22:59:23
【问题描述】:
我正在尝试按模块对向量中的元素进行排序,条件是相等(按模块)元素的初始顺序不会改变。逻辑告诉我,比较器应该小于或等于保存原始顺序。
std::sort(v.begin(), v.end(), [](int a, int b) {
return abs(a) <= abs(b);
});
但是以1 -1 1 -1 为例,我的编译器返回-1 1 -1 1。不幸的是,它用小于号保存了订单(我不明白为什么)。
决定 std::sort 不是 stalbe,我尝试使用 std::stable_sort 和 -1 1 1 -1 -1 的示例,它按顺序颠倒了元素 -1 -1 1 1 -1 - 虽然我预计订单会不以小于或等于的符号改变。
我错在哪里?是否有保证保持元素顺序的 lambda?
【问题讨论】:
-
Sort 需要
<排序,而不是<=。 -
您的排序 lambda 错误,不符合strict weak ordering 的要求。
-
排序函数必须使用strict weak ordering,而你的函数没有。
标签: c++ sorting comparator stable-sort