摘要:

   std::pairstd::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容器使用及对应的数据结构实现)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部