用C++对向量排序
时间:2020-02-23 14:30:04 来源:igfitidea点击:
介绍
在本教程中,我们将专注于用C++对向量进行排序。
排序是任何编程语言中执行最广泛的操作之一。
同样,在C++中,也有几种算法可以用来对任何数据结构进行排序。
特别是对于向量,我们可以按任何顺序(升序或者降序)执行排序操作。
在C++中按升序对向量进行排序
使用在algorithm头文件中定义的sort()函数可以很容易地将C++中的向量按升序排序。
sort()函数对给定的数据结构进行排序,不返回任何内容。
排序在两个传递的迭代器或者位置之间进行。
第三个参数确定要比较元素的顺序。
默认情况下,为了不传递第三个参数,该函数将其视为" std :: less <int>()"函数。
该函数根据比较两个参数(无论第一个参数是否小于另一个参数)返回true或者false。
因此,现在让我们看看如何在C++中对向量进行排序(升序)。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { //vector initialisation vector<int> vec {5, 4, 3, 2, 1}; cout<<"Before sorting vector : "; for(auto i=vec.begin(); i<vec.end(); i++) { cout<<" "<<*i; } std::sort(vec.begin(),vec.end());//Sorting the vector cout<<"\n\nAfter sorting vector : "; for(auto i=vec.begin(); i<vec.end(); i++) { cout<<" "<<*i; } return 0; }
输出:
Before sorting vector : 5 4 3 2 1 After sorting vector : 1 2 3 4 5
在C++中按降序对向量进行排序
如前所述,C++中sort()函数的第三个参数确定排序的顺序。
因此,我们可以其中定义函数以按期望的顺序对任何向量进行排序(在这种情况下,此顺序降序)。
1.在sort()中使用Greater <int>()
与less <int>()
函数相似,greater <int>()
函数返回布尔值true或者false,但含义相反。
如果第一个参数大于第二个参数,则上述条件为false时,该函数将返回true和false。
让我们看看如何使用它来获得降序排序的向量。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { //vector initialisation vector<int> vec { 2,4,6,8,10 }; cout<<"Before sorting vector : "; for(auto i=vec.begin(); i<vec.end(); i++) { cout<<" "<<*i; } std::sort(vec.begin(),vec.end(), greater<int>());//Sorting the vector using greater<int>() function cout<<"\n\nAfter sorting vector : "; for(auto i=vec.begin(); i<vec.end(); i++) { cout<<" "<<*i; } return 0; }
输出:
Before sorting vector : 2 4 6 8 10 After sorting vector : 10 8 6 4 2
2.在sort()中使用Lambda表达式
从C++ 11开始,lambda表达式的使用被引入C++编程。
它们不过是简单的单行函数,不需要声明,甚至不需要指定其返回类型。
因此,我们可以使用自己定义的lambda表达式来确定sort()函数的排序顺序。
这可以通过将单行表达式定义为sort()函数的第三个参数来完成。
让我们看看
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { //vector initialisation vector<int> vec { 11,22,33,44,55 }; cout<<"Before sorting vector : "; for(auto i=vec.begin(); i<vec.end(); i++) { cout<<" "<<*i; } std::sort(vec.begin(),vec.end(), [](int &a, int &b){ return a>b; }); //Sorting the vector using user-defined lambda expression(return type bool) cout<<"\n\nAfter sorting vector : "; for(auto i=vec.begin(); i<vec.end(); i++) { cout<<" "<<*i; } return 0; }
输出:
Before sorting vector : 11 22 33 44 55 After sorting vector : 55 44 33 22 11
其中表达式" a> b"用于比较向量中两个传递的参数。
从上面代码的输出中可以看到,向量根据需要以降序排序。