如何在排序函数中使用 rbegin()
how to work with rbegin() inside sort function?
我正在尝试使用排序函数对字符串进行排序:下面是一个字符串:索引从零开始
"effort"
我的目标是从索引 (1 到 4)[n=1,m=4] 按降序排序,以生成一个字符串:
"erofft"
我使用函数排序为:
sort( str.rbegin()+ (str.length()-1-m) , str.rbegin()+ (str.length()-1-n) );
但这似乎不起作用:我想我很难理解 rbegin() 迭代器。
我认为为此
使用rbegin
没有意义。您所需要的只是带有自定义比较器的排序:
std::sort(str.begin() + 1, str.begin() + 5, [](auto l, auto r) {
using Trait = std::remove_reference_t<decltype(str)>::traits_type;
return !Trait::lt(l, r) && !Trait::eq(l, r);
});
对上面的一点解释:
对于标准库中的所有范围,末尾都是排他性的,因此我们需要在
[1, 5)
范围内进行排序。sort
具有接受自定义比较器的重载。此自定义比较器在两个元素之间决定谁先来。为此,我们使用 lambda。要决定哪个元素先出现,我们可以做
l > r
,但这不是正确的方法。std::basic_string
有一个特征模板参数,用于决定如何比较和排序字符串。它可能具有使字符串不区分大小写的自定义特征。我的版本正确地使用了它。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在排序函数中使用 rbegin()