用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 &lt;int>()函数相似,greater &lt;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 &amp;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"用于比较向量中两个传递的参数。
从上面代码的输出中可以看到,向量根据需要以降序排序。