C++ 对元组的向量进行排序(升序)
本文将讨论在C++中对元组的向量进行升序排序。元组是一种存储在C++数据结构中的元素列表。它可以包含相同或不同的数据类型,并且我们可以按照它们被初始化为输入的顺序访问它们。元组的数据是有组织的,因此我们可以按照相同的顺序检索它们。
语法
tuple<data type-1, data type-2, data type-3,….> name
在C++中,这是我们如何初始化元组的方式。我们可能需要更多的元组函数来对元组向量进行排序:
make_tuple()
这个函数用于创建元组。我们可以根据初始化元组时传递的参数使用这个函数在元组中存储值。
语法
tuple<int, int, string> t;
t=make_tuple(5, 4, “hello”);
函数make_tuple()将传递给它的值存储到初始化的元组中。
get<>()
此函数用于获取特定的元组值或访问元组的值。
语法
tuple<int, int, int, int> t=make_tuple(1, 2, 3, 4);
cout<<get<2>(t);
输出结果
3
注意:元组也遵循向量的0索引规则,以访问存储在其中的元素。
向量是一种C ++数据结构,也可以用来存储相同数据类型元素的列表。它们类似于动态数组,允许在运行时改变大小。
任何数据类型的向量可以使用以下语法进行初始化:
#include <vector>
vector<data type> name;
我们可以传递任何数据类型,如int、string等,以初始化特定数据类型的向量。
我们将讨论如何按升序排列元组的向量。元组的向量可以通过根据元组中包含的第一个元素、存储在元组中的第二个元素或其他方式对向量进行排序。
在对元组的向量进行排序之前,让我们先学习如何在C++中初始化一个元组的向量。
示例
//C++ code to show vector of tuples is created and how to print it
#include <bits/stdc++.h>
using namespace std;
int main()
{
//initialise a vector of tuples by passing tuple through it
//initialise a tuple to store 4 integers
vector<tuple<int, int, int, int>> vec;
//store tuples in vector using push_back() function
//tuples are initialised using make_tuple() function
vec.push_back(make_tuple(2,2,4,9));
vec.push_back(make_tuple(5,3,1,8));
vec.push_back(make_tuple(7,3,-3,10));
vec.push_back(make_tuple(8,12,32,6));
int s=vec.size(); //to get the size of the vector
for(int i=0;i<s;i++){ //to print the elements stored in vector of tuples, vec
cout<<get<0>(vec[i])<<" "<<get<1>(vec[i])<<" "
<<get<2>(vec[i])<<" "<<get<3>(vec[i])<<endl;
}
return 0;
}
输出
2 2 4 9
5 3 1 8
7 3 -3 10
8 12 32 6
方法1(根据第一个元素排序)
我们可以使用C++中提供的内置库sort()对元组的向量进行排序。
该函数默认按照升序对数据结构中的元素进行排序。
函数的语法如下:
vector<int> v={5,8,7,3,1};
sort(v.begin(),v.end());
使用sort()函数时,通常会给出两个参数。第一个参数指定我们必须排序的组件的位置,第二个参数指定我们必须排序的元素的位置。我们的标准还允许我们传递第三个组件。作为例子,假设我们希望按降序对向量或数组进行排序。
sort()函数默认根据升序中的第一个元素排序。sort()函数可用于根据元组中包含的第一个元素简单地对元组的向量进行排序。
注意:在将向量的元组按照第一个元素进行排序时,如果第一个元素相等,则默认按照后续元素进行排序。
上述方法的C++代码:
示例
//function to sort vector of tuples with respect to first elements
#include <bits/stdc++.h>
using namespace std;
int main()
{
//initialise a vector of tuples by passing tuple through it
//initialise a tuple to store 4 integers
vector<tuple<int, int, int, int>> vec;
//store tuples in vector using push_back() function
//tuples are initialised using make_tuple() function
vec.push_back(make_tuple(10,2,14,9));
vec.push_back(make_tuple(7,3,-3,10));
vec.push_back(make_tuple(5,2,11,8));
vec.push_back(make_tuple(8,12,5,6));
//sort the vector of tuples in ascending order with respect to the first element
sort(vec.begin(),vec.end());
int s=vec.size(); //to get the size of the vector
for(int i=0;i<s;i++){ //to print the elements stored in vector of tuples, vec
cout<<get<0>(vec[i])<<" "<<get<1>(vec[i])<<" "
<<get<2>(vec[i])<<" "<<get<3>(vec[i])<<endl;
}
return 0;
}
输出
5 2 11 8
7 3 -3 10
8 12 5 6
10 2 14 9
时间复杂度:O(NlogN),其中N是向量的大小。
空间复杂度:O(1),因为我们没有使用任何额外的空间。
方法2(相对于第三个元素)
在这种情况下,我们将根据元组中的第三个元素对向量进行排序。为了根据元组中的第三个元素对向量进行排序,我们将使用上述方法中的sort()函数,但会进行修改。
众所周知,我们可以根据我们的需要向sort()函数传递第三个参数,以按照我们想要的方式对元素进行排序。
为了根据第三个元素对向量进行排序,我们将作为第三个参数传递一个布尔函数,仅用于检查元组的第三个元素是否小于下一个元组的第三个元素,以便按升序排序。
用于根据元组中的第三个元素进行排序的C++代码:
示例
//C++ code to sort the vector of tuples with respect to third element
#include <bits/stdc++.h>
using namespace std;
//function to compare third elements present in the tuple
bool third(tuple<int, int, int, int>& p,
tuple<int, int, int, int>& q){
return get<2>(p)<get<2>(q);
}
int main()
{
//initialise a vector of tuples by passing tuple through it
//initialise a tuple to store 4 integers
vector<tuple<int, int, int, int>> vec;
//store tuples in vector using push_back() function
//tuples are initialised using make_tuple() function
vec.push_back(make_tuple(10,2,14,9));
vec.push_back(make_tuple(7,3,-3,10));
vec.push_back(make_tuple(5,2,11,8));
vec.push_back(make_tuple(8,12,5,6));
//sort the vector of tuples in ascending order with respect to the first element
sort(vec.begin(),vec.end(),third);
int s=vec.size(); //to get the size of the vector
for(int i=0;i<s;i++){ //to print the elements stored in vector of tuples, vec
cout<<get<0>(vec[i])<<" "<<get<1>(vec[i])<<" "
<<get<2>(vec[i])<<" "<<get<3>(vec[i])<<endl;
}
return 0;
}
输出
7 3 -3 10
8 12 5 6
5 2 11 8
10 2 14 9
时间复杂度 :O(N logN),其中 N 是向量的大小。
空间复杂度 :O(1),因为我们没有使用任何额外的空间。
类似地,我们可以通过比较元组中的特定元素在一个布尔函数中来根据元组中的任何元素来对元组的向量进行排序。
结论
我们已经讨论了如何通过C++以升序对元组的向量进行排序以及如何根据元组中的任何元素使用sort()函数对元组的向量进行排序。我们讨论了如何通过在sort()函数中传递第三个参数来根据元组的元素位置对元组的向量进行排序。
我希望在阅读本文之后,您关于这个主题的所有疑问都得到了解答。