• STL pair 常见用法详解


    《算法笔记》学习笔记

    pair 常见用法详解

    //pair是一个很实用的”小玩意“,当想要将两个元素绑在一起作为一个合成元素,
    //又不想因此定义结构体时,使用pair可以很方便地作为一个替代品。
    //也就是说,pair实际上可以看作一个内部有两个元素地结构体,
    //且这两个元素的类型是可以指定的。
    struct pair {
        typename1 first;
        typename2 second;
    };
    

    1. pair的定义

    //要使用pair,应先添加头文件#include <utility>,并在头文件下面加上"using namespace std"
    //注意:由于map的内部实现中涉及pair,因此添加map头文件时会自动添加utility头文件
    //此时如果需要使用pair,就不需要额外再添加utility头文件
    
    //pair有两个参数,分别对应first和second的数据类型,它们可以是任意基本数据类型或容器
    //定义
    pair<typeName1, typeName2> name;
    //定义参数为string和int类型的pair
    pair<string, int> p;
    //初始化
    pair<string, int> p("haha", 5);
    
    //临时构建一个pair,有两种方法
    //<1> 将类型定义写在前面,后面用小括号内两个元素的方式
    pair<string, int> ("haha", 5)
    
    //<2> 使用自带的make_pair函数
    make_pair("haha", 5)
    

    2. pair中元素的访问

    //pair中有两个元素,分别是first和second,只需要按正常结构体的方式去访问即可。
    #include <iostream>
    #include <utility>
    #include <string>
    using namespace std;
    int main() {
        pair<string, int> p;
        p.first = "haha";
        p.second = 5;
        cout << p.first << " " << p.second << endl;
        p = make_pair("xixi", 55);
        cout << p.first << " " << p.second << endl;
        p = pair<string, int>("heihei", 555);
        cout << p.first << " " << p.second << endl;
        return 0;
    }
    

    3. pair 常用函数实例解析

    比较操作数

    //两个pair类型数据可以直接使用 ==, !=, <, <=, >, >= 比较大小,比较规则先以first的大小作为标准
    //只有当first相等时才去判别second的大小
    #include <cstdio>
    #incldue <utility>
    using namespace std;
    int main() {
        pair<int, int> p1(5, 10);
        pair<int, int> p2(5, 15);
        pair<int, int> p3(10, 5);
        if(p1 < p3) printf("p1 < p3
    ");
        if(p1 <= p3) printf("p1 <= p3
    ");
        if(p1 < p2) printf("p1 < p2
    ");
        return 0;
    }
    

    4. pair的常见用途

    • 用来提代二元结构体及其构造函数,可以节省编码时间
    • 作为map的键值对来进行插入
    #include <iostream>
    #include <string>
    #include <map>
    using namespace std;
    int main() {
        map<string, int> mp;
        mp.insert(make_pair("heihei", 5));
        mp.insert(pair<string, int>("haha", 10));
        for(map<string, int>::iterator it = mp.begin(); it != mp.end(); it++) {
            cout << it -> first << " " << it -> second << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    (16)JavaScript的流程控制(js的循环)
    (15)javaScript入门
    (14)定位布局(子级在父级中自由定位 父级在页面中自由定位)
    (0-1)CSS 标签语法的属性
    ACM/ICPC 之 双向链表_构造列表-模拟祖玛 (TSH OJ-Zuma(祖玛))
    手记-数学分析(高等数学)中有关算法效率的公式列举(O,Θ,Ω)
    2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
    整数划分问题-解法汇总(暂有DP-递归)
    2014北大研究生推免机试(校内)-垃圾炸弹(基础枚举)
    ACM/ICPC 之 BFS-广搜进阶-八数码(经典)(POJ1077+HDU1043)
  • 原文地址:https://www.cnblogs.com/isChenJY/p/11604641.html
Copyright © 2020-2023  润新知