C++容器——元组<tuple>

发布于:2024-05-05 ⋅ 阅读:(37) ⋅ 点赞:(0)

元组

自从C++11起,标准库引入了一个名为std::tuple的模板类,它允许存储不同类型的元素。


相对于其他容器的特点:

固定大小:一旦创建,元组的大小和类型集合就不能改变。

类型安全:每个元素的类型在编译时确定,并且可以通过模板参数指定。

异构性:元组内的元素类型可以各不相同。

访问元素:可以通过std::get函数或者基于索引的访问(C++14起)来访问元组中的特定元素,索引是从0开始的。

构造:元组可以通过直接初始化、使用std::make_tuple函数或者其它构造方法来创建。 

比较:元组之间支持比较操作,比较是按元素逐个进行的,遵循字典序。


元组的使用流程

  1. 使用元组需要加入头文件<tuple>
  2. 元组的定义及初始化
  3. 元组的使用

加入头文件

#include<tuple>

元组的定义及初始化

std::tuple<int, char>first{ 22, 'a' };
std::tuple<int, char>secend = std::make_tuple( 22,'a' );

元组的使用

访问元组里的元素

(1)使用get函数
#include<iostream>
#include<tuple>
int main()
{
	std::tuple<int, char>first{ 22, 'a' };
	std::cout << std::get<0>(first)<<std::endl;
	std::cout << std::get<1>(first)<< std::endl;
	return 0;
}

//输出结果是
//22
//a
(2)使用tie
#include<iostream>
#include<tuple>
int main()
{
	std::tuple<int, char>first{ 22, 'a' };
	int a;
	char b;
	std::tie(a, b) = first;
	std::cout << a << b;
	return 0;
}

//输出结果是
//22a
(3)使用auto(C++17后可以使用)
#include<iostream>
#include<tuple>
int main()
{
	std::tuple<int, char>first{ 22, 'a' };
	auto[a, b] = first;
	std::cout << a << b;
	return 0;
}

//输出结果是
//22a

元组的比较

#include<iostream>
#include<tuple>
int main()
{
	std::tuple<int, char>first{ 22, 'a' };
	std::tuple<int, char>secend{ 2, 'a'};
	if (first < secend)
	{
		std::cout << "first<secend";
	}
	else if (first > secend)
	{
		std::cout << "first>secend";
	}
	else
	{
		std::cout << "first=secend";
	}
	return 0;
}

//输出的结果是
//first>secend

元组的比较需要两个元组的元素个数相同,从前到后的元素类型一致或者是可比较的原型 

拼接元组

使用std::tuple_cat 

#include<iostream>
#include<string>
#include<tuple>
int main()
{
	std::tuple < char, char >first{ 's', 'a'};
	std::tuple < std::string, char > secend{ "sfl", 'a' };
	
	auto tuple = std::tuple_cat(first, secend);

	return 0;
}

比较的元组

使用swap

#include<iostream>
#include<string>
#include<tuple>
int main()
{
	std::tuple < char, char >first{ 's', 'a'};
	std::tuple < char, char > secend{ 'c', 'a'};
	
	first.swap(secend);
	std::cout << get<0>(first);

	return 0;
}

//输出结果是
//c

  交换这两个元组必须拥有相同的类型和元素个数