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<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问题