0

例如,下面的代码按 desc 顺序对 vec 进行排序:

std::vector<int> vec = {1, 2, 5, 4, 3};
sort(vec.rbegin(), vec.rend());
for(const auto v : vec)
    std::cout << v << "\n";
output 5 4 3 2 1

C++ 参考

将 [first,last) 范围内的元素按升序排序。对于第一个版本,使用 operator< 比较元素 [...]

4

1 回答 1

6

该函数调用确实按从最后一个元素到第一个元素的升序对向量进行排序,因为使用了反向迭代器

sort(vec.rbegin(), vec.rend());

当您使用反向迭代器时,向量将以相反的顺序遍历。

考虑这个 for 循环

for (auto first = vec.rbegin(), last = vec.rend(); first != last; ++first)
{
    std::cout << *first << ' ';
}
std::cout << '\n';

它的输出是

3 4 5 2 1

如果要在直接方向上按升序对向量进行排序,则不要使用反向迭代器。例如

sort(vec.begin(), vec.end());

或者,如果要使用反向迭代器,那么std::less<int>您需要使用该类型的函数对象而不是该类型的默认函数对象std::greater<int>

sort( vec.rbegin(), vec.rend(), std::greater<int>() );
于 2021-12-17T15:13:20.610 回答