• pair的基本用法总结


    1,pair的应用

    pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair

    如stl中的map就是将key和value放在一起来保存。

    另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。

    pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。

    类模板:template struct pair

    参数:T1是第一个值的数据类型,T2是第二个值的数据类型。

    功能:pair将一对值(T1和T2)组合成一个值

            这一对值可以具有不同的数据类型(T1和T2),

            两个值可以分别用pair的两个公有函数first和second访问

    定义(构造函数):2,pair的创建和初始化

    1. pair<T1, T2> p1; //创建一个空的pair对象(使用默认构造),
    2. //它的两个元素分别是T1和T2类型,采用值初始化。
    3. pair<T1, T2> p1(v1, v2); //创建一个pair对象,
    4. //它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2
    5. make_pair(v1, v2); // 以v1和v2的值创建一个新的pair对象,
    6. //其元素类型分别是v1和v2的类型。
    7. p1 < p2; // 两个pair对象间的小于运算,其定义遵循字典次序:
    8. //如 p1.first < p2.first 或者 p2.first < p1.first && p1.second < p2.second 则返回true
    9. p1 == p2// 如果两个对象的first和second依次相等
    10. //则这两个对象相等;该运算使用元素的==操作符。
    11. p1.first; // 返回对象p1中名为first的公有数据成员
    12. p1.second; // 返回对象p1中名为second的公有数据成员

    2,pair的创建和初始化

    pair包含两个数值,与容器一样,pair也是一种模板类型。但是又与之前介绍的容器不同;

    在创建pair对象时,必须提供两个类型名,两个对应的类型名的类型不必相同

    1. pair<string, string> anon; // 创建一个空对象anon,两个元素类型都是string
    2. pair<string, int> word_count; // 创建一个空对象 word_count, 两个元素类型分别是string和int类型
    3. pair<string, vector<int> > line; // 创建一个空对象line,两个元素类型分别是string和vector类型

    当然也可以在定义时进行成员初始化:

    1. pair<string, string> author("James","Joy"); // 创建一个author对象,
    2. //两个元素类型分别为string类型,并默认初始值为James和Joy。
    3. pair<string, int> name_age("Tom", 18);
    4. pair<string, int> name_age2(name_age); // 拷贝构造初始化

    pair类型的使用相当的繁琐,如果定义多个相同的pair类型对象,可以使用typedef简化声明:

    1. typedef pair Author;
    2. Author proust("March","Proust");
    3. Author Joy("James","Joy");

    变量间赋值

    1. air<int, double> p1(1, 1.2);
    2. pair<int, double> p2 = p1; // 复制构造以初始化对象
    3. pair<int, double> p3
    4. p3 = p1; // 复制构造以初始化对象

    3,pair对象的操作

    访问两个元素操作可以通过first和second访问

    1. pair<int ,double> p1;
    2. p1.first = 1;
    3. p1.second = 2.5;
    4. cout<<p1.first<<' '<<p1.second<<endl;
    5. //输出结果:1 2.5
    6. string firstBook;
    7. if(author.first=="James" && author.second=="Joy")
    8. firstBook="Stephen Hero";

    4,生成新的pair对象

    还可以利用make_pair创建新的pair对象:

    1. pair<int, double> p1;
    2. p1 = make_pair(1, 1.2);
    3. cout << p1.first << p1.second << endl;
    4. //output: 1 1.2
    5. int a = 8;
    6. string m = "James";
    7. pair<int, string> newone;
    8. newone = make_pair(a, m);
    9. cout << newone.first << newone.second << endl;
    10. //output: 8 James

  • 相关阅读:
    基于51单片机驱动A4988实现步进电机逆时针转动
    [CISCN2019 华北赛区 Day1 Web2]ikun
    D. Divide and Sum(组合数学)
    PaddleOCR安卓Demo存在的问题
    【C#教程16/16】: 输入输出
    国际站、速卖通、Lazada店铺运营技巧?如何提升销量?
    R语言和医学统计学(11):球形检验
    这个编辑器即将开源!
    中职组网络安全C模块全漏洞脚本讲解包含4个漏洞的脚本
    .NET微信网页开发之网页授权获取用户基本信息
  • 原文地址:https://blog.csdn.net/2301_80610560/article/details/139397158