C++ 容器:pair & tuple
摘要:
std::pair
和 std::tuple
并不是stl容器库中的容器,不过鉴于经常使用能和STL配合,也具有容器的属性,就放一起浅提一下,它们用于函数传参和函数返回值也挺方便。
template <class… Types> class tuple;
template <class T1, class T2> struct pair;
(开发环境:VScode,C++17)
关键词
:C++,容器,数据存储,数据类型,pair ,tuple
声明:
本文作者原创,转载请附上文章出处与本文链接。
(文章目录:)
正文:
pair
在C++中,
pair
是一个非常实用的容器,它定义在<utility>
头文件中。pair
容器可以存储两个值,这两个值可以是不同的数据类型。pair
通常用于需要同时处理两个相关数据的场景,比如一个键(key)和一个值(value),或者任何需要成对出现的数据。
pair
可以看作是把tuple
的 size 限制为 2 的一个特例
使用例子:
#include <iostream>
#include <unordered_map>
#include <string>
int main()
{
// 声明一个unordered_map,键为string类型,值为int类型
std::unordered_map<std::string, int> ageMap;
// 向unordered_map中插入pair元素
ageMap.insert(std::make_pair("Alice", 30));
ageMap.insert({"Bob", 25});
// 或者使用下标操作符(如果键不存在,则会自动创建该键并初始化为默认值)
ageMap["Charlie"] = 35;
// 访问unordered_map中的元素
if (ageMap.find("Alice") != ageMap.end()) {
std::cout << "Alice's age is " << ageMap["Alice"] << std::endl;
}
// 遍历unordered_map
for (const auto& pair : ageMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
tuple
tuple
叫作元组,它可以把一组类型相同或不同的元素组合到一起,且元素的数量不限,定义于<tuple>
。tuple
的底层原理是基于递归实现与 stl 中的容器完全不同,但在功能上,tuple
是对容器的有效补充,因为所有的容器都只能组合相同类型的元素,但tuple
可以组合任意不同类型的元素。当需要使用2个或2个以上元素时,可以使用
tuple
,类似于struct结构。
常用函数方法:
-
std::get:访问
std::tuple
的元素。 -
可用std::get配合std::tie修改
std::tuple
的元素由于
std::tuple
的元素默认是const的,因此你不能直接修改它们。 -
std::tuple_size:获取元组的大小。
-
std::tuple_element:获取元素的类型。
-
std::tuple_cat:用于合并两个或多个
std::tuple
。
使用例子:
#include <iostream>
#include <vector>
#include <tuple>
#include <string>
int main()
{
// 创建一个vector,其元素类型为tuple<int, string, double>
std::vector<std::tuple<int, std::string, double>> vec;
// 向vector中添加元素
vec.emplace_back(1, "Apple", 0.5);
vec.emplace_back(2, "Banana", 1.0);
vec.emplace_back(3, "Cherry", 1.5);
// 遍历vector并打印每个tuple的内容
for (const auto& t : vec) {
std::cout << std::get<0>(t) << ", " // 获取并打印第一个元素(int)
<< std::get<1>(t) << ", " // 获取并打印第二个元素(string)
<< std::get<2>(t) << std::endl; // 获取并打印第三个元素(double)
}
return 0;
}
推荐阅读
博客主页:https://blog.csdn.net/weixin_45068267
(客官逛一逛,有许多其它有趣的专栏博文)
C/C++专栏:https://blog.csdn.net/weixin_45068267/category_12268204.html
(内含其它STL容器使用及对应的数据结构实现)
原文地址:https://blog.csdn.net/weixin_45068267/article/details/140346987
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!