在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.