gpt4 book ai didi

c++ - 如何在排序函数中使用 rbegin()?

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:12 28 4
gpt4 key购买 nike

我正在尝试使用排序函数对字符串进行排序:这是一个字符串:索引从

开始
"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 有一个 traits 模板参数,它决定如何比较和排序字符串。它可以具有使字符串不区分大小写的自定义特征。我的版本正确地使用了它。

关于c++ - 如何在排序函数中使用 rbegin()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53922345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com