在C++中,std::vector
对象可以通过std::sort
函数来排序。std::sort
是定义在<algorithm>
头文件中的一个通用函数,可以对几乎所有类型的容器进行排序。它不是std::vector
的成员函数,但可以直接作用于std::vector
。
基本用法很简单:提供std::sort
函数的开始和结束迭代器,它会使用默认的比较运算符(通常是<
)来对元素进行排序。你也可以提供自定义的比较函数来定义排序的规则。
下面是几个使用std::sort
对std::vector
排序的示例:
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> v = {4, 1, 3, 5, 2};
std::sort(v.begin(), v.end());
for (int i : v) {
std::cout << i << " ";
}
return 0;
}
这段代码将输出排序后的向量:1 2 3 4 5
。
#include <vector>
#include <algorithm>
#include <iostream>
bool customCompare(int a, int b) {
return a > b;
}
int main() {
std::vector<int> v = {4, 1, 3, 5, 2};
std::sort(v.begin(), v.end(), customCompare);
for (int i : v) {
std::cout << i << " ";
}
return 0;
}
这段代码使用自定义比较函数customCompare
对向量进行降序排序,输出将是:5 4 3 2 1
。
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> v = {4, 1, 3, 5, 2};
// 使用Lambda表达式进行降序排序
std::sort(v.begin(), v.end(), [](int a, int b) {
return a > b;
});
for (int i : v) {
std::cout << i << " ";
}
return 0;
}
这段代码使用Lambda表达式作为自定义比较函数,同样实现了降序排序,输出为:5 4 3 2 1
。
以上就是std::sort
在std::vector
上的基本用法。你可以根据需要使用默认的排序规则或自定义排序规则。
Lambda表达式是C++中一个非常强大的特性,它允许你在需要函数对象的地方写一个匿名(无名)函数。在上述代码中,Lambda表达式被用作自定义比较函数,提供给std::sort
函数以定义排序的规则。
Lambda表达式的基本语法如下:
[ capture_clause ] ( parameters ) -> return_type { body }
在上述例子中的Lambda表达式:
[](int a, int b) {
return a > b;
}
[]
表示这个Lambda不捕获任何外部变量。(int a, int b)
,Lambda接收两个整数参数。return a > b;
自动推断为bool
。{ return a > b; }
,如果a
大于b
,返回true
,否则返回false
。这个Lambda表达式被用作std::sort
的自定义比较函数,用于确定两个元素之间的排序顺序。在这个例子中,它指定了一个降序的排序规则。Lambda表达式使得在需要传递简单函数时代码更加简洁和清晰。