赞
踩
sort():对容器或普通数组中范围内的元素进行排序,默认进行升序排序,也可以自定义排序规则。
sort() 函数只对 array、vector、deque 这 3 个容器提供支持。
sort() 函数在对自定义的类对象实现排序时,需要在该类的内部提供移动构造函数和移动赋值运算符。
函数原型:该函数有以下两种语法格式
//对 [beg, end) 区域内的元素做默认的升序排序
sort (iterator beg,iterator end);
//按照指定的 comp 排序规则,对 [beg, end) 区域内的元素进行排序
sort (iterator beg,iterator end, Compare comp);
参数说明:
greater<T>
);或普通函数以及函数对象接收的自定义的排序规则默认排序和标准库提供的排序
#include<iostream> using namespace std; #include<algorithm> #include<vector> void myPrint(int val) { cout << val << " "; } void test01() { vector<int> v{1,4,5,3,2}; //默认升序排序 sort(v.begin(), v.end());//1 2 3 4 5 for_each(v.begin(), v.end(), myPrint); cout << endl; //从大到小排序,标准库提供的排序规则 sort(v.begin(), v.end(), greater<int>());//5 4 3 2 1 for_each(v.begin(), v.end(), myPrint); cout << endl; } int main() { test01(); system("pause"); return 0; }
自定义排序规则
#include<iostream> using namespace std; #include<algorithm> #include<vector> void myPrint(int val) { cout << val << " "; } //以普通函数的方式实现自定义排序规则(升序) bool mycomp(int i, int j) { return (i < j); } //以函数对象的方式实现自定义排序规则(升序) class mycomp2 { public: bool operator() (int i, int j) { return (i < j); } }; void test01() { vector<int> v{ 32, 71, 12, 45, 26, 80, 53, 33 }; sort(v.begin(), v.end(), mycomp);//12 26 32 33 45 53 71 80 for_each(v.begin(), v.end(), myPrint); cout << endl; sort(v.begin(), v.end(), mycomp2());//12 26 32 33 45 53 71 80 for_each(v.begin(), v.end(), myPrint); cout << endl; } int main() { test01(); system("pause"); return 0; }
random_shuffle():指定范围内的元素随机调整次序
函数原型:
random_suffle(iterator beg,iterator end);
参数说明:
#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<ctime> void myPrint(int val) { cout << val << " "; } void test01() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i); } //打乱顺序前的遍历 for_each(v.begin(), v.end(), myPrint); cout << endl; //打乱顺序后的遍历 random_shuffle(v.begin(), v.end()); for_each(v.begin(), v.end(), myPrint); cout << endl; } int main() { //加入随机数种子,使每次程序启动的随机数都不一样 srand((unsigned int)time(NULL)); test01(); system("pause"); return 0; }
合并排序,merge() 函数用于将 2 个有序序列合并为 1 个有序容器,前提是这 2 个有序容器的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序容器,其排序规则也和这 2 个有序容器要相同。
函数原型:该函数有以下两种格式
//默认升序为排序规则,[beg1, end1) 和 [beg2, end2) 指定区域内的元素必须支持 < 小于运算符
merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
//自定义的 comp 规则作为排序规则,[beg1, end1) 和 [beg2, end2) 指定区域内的元素必须支持comp 排序规则内的比较运算符
merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest, Compare comp);
参数说明:
默认排序
void myPrint(int val) { cout << val << " "; } void test01() { //有序的容器 vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i * 2); } //新有序容器 vector<int> v3; //一定要提前给容器分配空间 v3.resize(v1.size() + v2.size()); merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); //打印出来的还是个有序序列 for_each(v3.begin(), v3.end(), myPrint);//0 0 1 2 2 3 4 4 5 6 6 7 8 8 9 10 12 14 16 18 cout << endl; }
自定义排序规则
void myPrint(int val) { cout << val << " "; } //以普通函数的方式实现自定义排序规则(降序) bool mycomp(int i, int j) { return (i > j); } //以函数对象的方式实现自定义排序规则(降序) class mycomp2 { public: bool operator() (int i, int j) { return (i > j); } }; void test01() { //有序的容器 vector<int> v1; vector<int> v2; for (int i = 10; i > 0; i--) { v1.push_back(i); v2.push_back(i * 2); } //新有序容器 vector<int> v3; //一定要提前给容器分配空间 v3.resize(v1.size() + v2.size()); merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin(), mycomp); for_each(v3.begin(), v3.end(), myPrint);//20 18 16 14 12 10 10 9 8 8 7 6 6 5 4 4 3 2 2 1 cout << endl; merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin(), mycomp2()); for_each(v3.begin(), v3.end(), myPrint);//20 18 16 14 12 10 10 9 8 8 7 6 6 5 4 4 3 2 2 1 cout << endl; }
reverse()函数:将容器指定范围内的元素进行反转
函数原型:
reverse(iterator beg,iterator end);
参数说明:
void myPrint(int val) {
cout << val << " ";
}
void test01() {
vector<int> v1;
//有序的容器
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
reverse(v1.begin(), v1.end());
for_each(v1.begin(), v1.end(), myPrint);//9 8 7 6 5 4 3 2 1 0
cout << endl;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。