zoukankan      html  css  js  c++  java
  • C++通用工具:pair和tuple

    pair

    class pair可将两个value视为一个单元。C++标准库内多处都用到了这个class,比如容器map,multimap,unordered_map等,任何函数如果需要返回两个value,也需要用到pair,比如minmax()等。

    class pair的完整功能定义于头文件

    #include<utility>
    namespace std
    {
        template <typename T1,typename T2>
        struct pair
        {
            T1 first;
            T2 second;
            ...
        };
    }

    由上述定义,我们不难得出,pair的所有成员都是public的,所以pair提供了直接访问数据成员的能力。

    pair操作函数

    pair<t1,t2> p                                 //default构造函数,建立一个函数,其元素类型分别t1和t2,各自以default函数初始化
    pair<t1,t2> p(val1,val2)                      //建立一个pair,元素类型分别为t1和t2,以val1和val2为初值
    pair<t1,t2> p(piecewise_construct,val1,val2); //建立一个pair,元素类型分别为tuple t1和t2,以tuple val1和val2为初值
    pair<t1,t2> p(p2)                             //copy构造函数,建立p成为p2的拷贝
    p=p2                                          //将p2的值赋给p
    p.first                                       //获得pair内的第一value
    p.second                                      //获得pair内的第二value
    get<0>(p)                                     //等价于p.first
    get<1>(p)                                     //等价于p.second
    p1.swap(p2)                                   //互换p1和p2的数据
    make_pair<val1,val2>                          //返回一个pair,带有val1和val2的类型和数值。

    注意,pair在进行比较操作时,第一元素具有较高比较级,只有在第一元素相等时,才会去比较第二元素。

    tuple

    tuple又叫元组,它扩展了pair的概念,拥有任意数量的元素。tuple呈现出一个异质元素列,其中每个类型都可以用来被指定。

    tuple最初沿用的是C++98的标准,默认建议是至少10个实参,又累赘又限制,后来到C++11,tuple得到了极大的优化,才有了现在的class tuple

    #include<tuple>
    namespace std
    {
        template <typename... Types>
        class tuple;
    }

    tuple的操作

    原则上,tuple的接口十分直观

    tuple<t1,t2,...,tn> t               //以n个给定类型的元素建立一个tuple,以各元素类型得到default构造函数完成初始化,基础类型的初值为0
    tuple<t1,t2,...,tn> t(v1,v2,...,vn) //以n个给定类型的元素建立一个tuple,以给定值完成初始化
    t=t2                                //将t2赋值给t
    t.swap(t2)                          //互换t1和t2的数据
    make_tuple(v1,v2,...)               //以传入的所有数据和类型建立一个tuple,并允许由此tuple提取数值

    tuple的读入输出

    #include<iostream>
    #include<tuple>
    #include<string>
    using namespace std;
    int main()
    {
        tuple<string,string,string,int> t;
        get<0>(t)="Hello";
        get<1>(t)="World";
        get<2>(t)=" !";
        get<3>(t)=2019;
        cout<<get<0>(t)<<" "<<get<1>(t)<<get<2>(t)<<" "<<get<3>(t);
        return 0;
    }

    get<num>(typename tuple)里,num对应元素编号,以0开始,()内是tuple的名称,注意,tuple不可在编译期进行赋值。

  • 相关阅读:
    shell脚本基础->
    1->小规模集群架构规划
    推荐系统读书笔记(一)好的推荐系统
    数据挖掘概念与技术读书笔记(二)认识数据
    Linux编辑器vi使用方法详细介绍
    用户不在sudoers文件中的解决方法
    机器学习实战读书笔记(三)决策树
    机器学习实战读书笔记(二)k-近邻算法
    机器学习实战读书笔记(一)机器学习基础
    R语言实战读书笔记(十三)广义线性模型
  • 原文地址:https://www.cnblogs.com/cloudplankroader/p/10460396.html
Copyright © 2011-2022 走看看