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(N logN),其中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()函数中传递第三个参数来根据元组中元素的任何位置对元组向量进行排序。

我希望在阅读本文后,您关于该主题的所有疑问都已得到解答。

更新于:2023年8月21日

浏览量:1000+

开启你的职业生涯

完成课程获得认证

开始学习
广告