在C++中对一个向量进行排序

引言

简介

在这个教程中,我们将专注于在C++中对一个向量进行排序。

在任何编程语言中,排序是一个广泛执行的操作之一。同样,在C++中,我们也可以按照几种算法对任何数据结构进行排序。

对于向量来说,我们可以按照任意顺序(升序或降序)进行排序操作。

在C++中按升序对向量进行排序

在C++中,可以使用在algorithm头文件定义的sort()函数轻松将向量按升序排序。

sort()函数对给定的数据结构进行排序,不返回任何内容。排序发生在两个迭代器或位置之间。第三个参数确定了元素将被比较的顺序。

默认情况下,如果不传递第三个参数,函数会认为它是std::less()函数。该函数通过比较两个参数是否第一个小于第二个来返回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()

类似于less()函数,greater()函数以相反的方式返回一个布尔值,即真或假。如果第一个参数大于第二个参数,该函数返回真,如果不满足上述条件,则返回假。

让我们看看如何使用它来获得按降序排列的向量。

#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. 使用 Lambda 表达式在 sort() 中。

自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用于比较从向量传递的两个参数。从上述代码的输出可以看出,向量按照期望的降序排序了。

结论

所以,在这篇文章中,我们学习了如何在C++中对向量进行升序和降序排序。如果有关此主题的任何进一步问题,请随时在下方的评论中提问。

参考资料

  • Sorting in STL – JournalDev Tutorial,
  • – C++ algorithm Library,
  • How to sort an STL vector? – StackOverflow Question,
  • Sorting a vector in descending order – StackOverflow Question.
发表回复 0

Your email address will not be published. Required fields are marked *