sort()函数
函数原型:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare cmp);
头文件:< algorithm >
参数说明:
first表示要排序数组的起始地址;
last表示数组结束地址的下一位;
cmp规定排序的方法,如果不填,默认为升序。
功能:将将[first, last)区间内元素升序排列或者降序排列。
区间为左闭右开。
(一)升序
第一种方式:使用STL的仿函数less
#include < vector>
#include < algorithm>
#include < iostream>
int main(int argc, char* argv[]){
std::vector<int> vec = {1, 3, 5, 2, 4, 6};
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::sort(vec.begin(), vec.end(), std::less<int>());
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出:
1 3 5 2 4 6
1 2 3 4 5 6
第二种方式:自己实现仿函数
#include < vector>
#include < algorithm>
#include < iostream>
bool cmp(int a, int b) {
return a < b;
}
int main(int argc, char* argv[]){
std::vector<int> vec = {1, 3, 5, 2, 4, 6};
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::sort(vec.begin(), vec.end(), cmp);
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出:
1 3 5 2 4 6
1 2 3 4 5 6
第三种方式:缺省仿函数
#include <vector>
#include <algorithm>
#include <iostream>
int main(int argc, char* argv[]){
std::vector<int> vec = {1, 3, 5, 2, 4, 6};
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::sort(vec.begin(), vec.end());
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出:
1 3 5 2 4 6
1 2 3 4 5 6
(二)降序
第一种方式:使用STL的仿函数greater
#include <vector>
#include <algorithm>
#include <iostream>
int main(int argc, char* argv[]){
std::vector<int> vec = {1, 3, 5, 2, 4, 6};
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::sort(vec.begin(), vec.end(), std::greater<int>());
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出:
1 3 5 2 4 6
6 5 4 3 2 1
第二种方式:自己实现仿函数
#include <vector>
#include <algorithm>
#include <iostream>
bool cmp(int a, int b) {
return a > b;
}
int main(int argc, char* argv[]){
std::vector<int> vec = {1, 3, 5, 2, 4, 6};
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::sort(vec.begin(), vec.end(), cmp);
for (auto num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出:
1 3 5 2 4 6
6 5 4 3 2 1