C++向量排序:高效算法与实用技巧

引言

本教程将重点介绍如何在C++中对向量进行排序。

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

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

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

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

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

默认情况下,如果不传递第三个参数,函数会将其视为std::less()函数。该函数通过比较两个参数是否第一个小于第二个来返回truefalse

现在,让我们看看如何在C++中对向量进行升序排序。

#include<iostream>    
#include<vector> 
#include<algorithm>
using namespace std;
int main()
{  
	// 向量初始化
	vector<int> vec {5, 4, 3, 2, 1};
	
	cout<<"排序前向量: ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	
	std::sort(vec.begin(),vec.end());// 排序向量
	
	cout<<"\n\n排序后向量: ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	return 0;
}

输出:

排序前向量:  5 4 3 2 1

排序后向量:  1 2 3 4 5

在C++中按降序排序向量

这是文章《在C++中对一个向量进行排序》的第2部分(共4部分)。

正如我们之前提到的,C++中`sort()`函数的第三个参数决定了排序的顺序。因此,我们可以在其中定义函数,以我们期望的顺序(在本例中为降序)对任何向量进行排序。

1. 在`sort()`中使用`greater()`,类似于`less()`函数。

`greater()`函数以相反的方式返回一个布尔值(真或假)。如果第一个参数大于第二个参数,该函数返回`true`;否则,返回`false`。

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

#include<iostream>    
#include<vector> 
#include<algorithm>
using namespace std;
int main()
{  
	// 向量初始化
	vector<int> vec { 2,4,6,8,10 };
	
	cout<<"排序前的向量:";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	
	std::sort(vec.begin(),vec.end(), greater<int>());// 使用 greater<int>() 函数对向量进行排序
	
	cout<<"\n\n排序后的向量:";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	return 0;
}
排序前的向量: 2 4 6 8 10

排序后的向量: 10 8 6 4 2

2. 在`sort()`中使用 Lambda 表达式。

在C++中对向量进行排序(第3部分,共4部分)

自C++11标准引入以来,Lambda表达式成为C++编程中的一项强大特性。它们本质上是简洁的匿名函数,无需显式声明,甚至可以自动推断返回类型。

因此,我们可以利用自定义的Lambda表达式来精确控制sort()函数的排序行为。这可以通过将Lambda表达式作为sort()函数的第三个参数来实现。接下来,我们将通过示例代码详细展示其用法。

#include<iostream>    
#include<vector> 
#include<algorithm>
using namespace std;
int main()
{  
	// 向量初始化
	vector<int> vec { 11,22,33,44,55 };
	
	cout<<"排序前向量:";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	
	std::sort(vec.begin(),vec.end(), [](int &a, int &b){ return a>b; });
        // 使用用户定义的Lambda表达式对向量进行排序(返回类型为bool)
	
	cout<<"\n\n排序后向量:";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	return 0;
}

输出:

排序前向量: 11 22 33 44 55

排序后向量: 55 44 33 22 11

在此示例中,表达式a > b用于比较从向量中传递的两个参数。从上述代码的输出可以看出,向量已按照预期的降序成功排序。

结论

这是文章《在C++中对一个向量进行排序》的第4部分(共4部分)。

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

参考资料

  • STL排序 – JournalDev教程
  • C++算法库
  • 如何对STL向量进行排序? – StackOverflow问题
  • 如何对向量进行降序排序? – StackOverflow问题
bannerAds