21xrx.com
2024-11-08 22:01:13 Friday
登录
文章检索 我的文章 写文章
C++ 中vector的反向排序
2023-06-27 10:01:09 深夜i     --     --
C++ vector 反向 排序

在C++中,vector是一个常用的容器,可以存储任何数据类型的动态数组。在使用vector时,经常需要对其中的元素进行排序。C++中提供了多种排序算法,但是向量默认是升序的,如果想要进行反向排序(即按降序排列元素),需要使用一些特定的函数和方法。

1. 使用“std::sort”的比较函数参数

C++中排序算法的一个常见函数是“std::sort”,可以对向量中的元素进行排序。如果要按照降序排列元素,需要通过比较函数参数进行指定。比较函数的返回值应该与“std::sort”期望的相同:如果第一个元素小于第二个,则返回true。

为了实现降序排列,比较函数应该比较第二个参数和第一个参数。这将导致“std::sort”调用比较函数时返回true,从而将第二个参数放在第一个参数的前面。

下面是一个向量的例子,其中元素按升序排列:


#include <iostream>

#include <vector>

#include <algorithm>

int main() {

  std::vector<int> v = 4;

  

  // 按升序排列

  std::sort(v.begin(), v.end());

  

  for (int x : v)

    std::cout << x << " ";

  

  

  return 0;

}

该程序的输出结果为:1 2 3 4 5。

现在将比较函数参数添加到原始向量中,以按降序排序向量中的元素:


std::sort(v.begin(), v.end(), [](int a, int b)

  return a > b;

);

此时,向量中的元素将按照降序排列,即5 4 3 2 1。

2. 使用“std::reverse”函数

C++中的另一个函数“std::reverse”可以反转向量中的元素。这不是按照降序排列向量中的元素,而是完全颠倒它们的顺序。这意味着,原始向量中的元素可以是任何顺序,而不仅是逆序排序。

与“std::sort”不同,“std::reverse”没有参数(或者只有一个范围参数),所以不需要编写比较函数:


#include <iostream>

#include <vector>

#include <algorithm>

int main() {

  std::vector<int> v = 4;

  

  // 反转向量中的元素

  std::reverse(v.begin(), v.end());

  

  for (int x : v)

    std::cout << x << " ";

  

  

  return 0;

}

该程序的输出结果为:5 4 1 2 3。

如果想同时使用“std::sort”和“std::reverse”来按降序排列向量中的元素,需要先使用“std::sort”进行排序,然后再使用“std::reverse”:


std::sort(v.begin(), v.end(), [](int a, int b)

  return a > b;

);

std::reverse(v.begin(), v.end());

此时,向量中的元素将按照降序排列,即5 4 3 2 1。

综上所述,按降序排列向量中的元素可以使用“std::sort”函数的比较函数参数或者“std::reverse”函数。前者可以根据需要自定义比较函数,而后者则不需要任何参数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复