c++ - 在两个范围内按降序对向量进行排序
问题描述
假设我有一个整数向量:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
然后我按降序排序:
sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];})
for (int i=0; i<15; i++) printf("%i\n", indices[i]);
这会产生以下结果:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
现在我想将数字 3、4、5 和 6 移到最后,并保持它们的降序(最好不必sort
第二次使用)。即,这就是我想要的:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
我应该如何修改 的比较功能std::sort
来实现呢?
解决方案
你的比较函数是错误的,因为你得到的值是first
和second
的元素std::vector
。因此,没有必要将它们用作索引。所以,你需要改变
return indices[first] > indices[second];
至
return first > second;
现在,关于你试图解决的问题......
您可以将 3、4、5 和 6 不与其他元素进行比较,但仍然可以相互比较:
std::sort(
indices.begin(), indices.end(),
[](int first, int second) -> bool {
bool first_special = first >= 3 && first <= 6;
bool second_special = second >= 3 && second <= 6;
if (first_special != second_special)
return second_special;
else
return first > second;
}
);
推荐阅读
- flutter - 从 DataTable 创建 pdf
- javascript - 如何在 Vuejs 和 Expressjs 中上传文件
- r - 如何基于现有数据集创建新数据集
- javascript - 无效的正则表达式:“/^[+]?[0-9]{0,1}[-.]?\(?([0-9]{3})\)?[-.]?([0 -9]{3})[-. ]?([0-9]{4})$/gm" 在 javscript
- image - 第一个项目问题图像未显示在 github 上
- python - Python数据框将时间日期'SylmiSeb'(2018-12-31 23:43:02+00:00)转换为日期时间
- webhooks - 是否有适用于 Google 我的商家 (GMB) 的 Webhook?
- python-3.x - 在字典Python3中计算值
- bootstrap-5 - bootstrap-select 不能与 bootstrap 5 一起使用
- azure - Azure Migrate 凭据文件