Pair简单用法

 一、功能:

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

    头文件:其标准库类型--pair类型定义在#include <utility>

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

    std::pair是一个工具类,它是一个很简单的封装两个对象的模板,其本身没有堆内存管理功能。保存在std::pair中的两个对象的类型分别通过两个模板参数来指定。

二、构造赋值

        pair<string,int> li;
        pair<string,vector<int>> persion;
        pair<int, string> t0(10, "good");
        pair<int, string> t1 = t0; // 拷贝构造函数
        pair<int, string> t2 = t1;
        typedef pair<string, int> Per;
        Per zhang("Zhang feng", 28);

        // 赋值
        li = make_pair("li jun", 20);
        vector<int> lst = {0,2,4,8};
        persion = make_pair("cls one", lst);
        // 访问
        cout << li.first << " " << li.second << endl;
        cout << zhang.first << " " << zhang.second << endl;
        vector<int> sec = persion.second;
        cout << persion.first << " ";
        for (size_t i = 0; i < sec.size(); ++i) {
            cout << sec[i] << " ";
        }

三、示例:

1. 单独示例:

class PairSotion {
public:
    static bool VecCmp(pair<int,int> a, pair<int,int> b)
    {
        if (a.first != b.first) {
            return a.first < b.first;
        }
        return a.second < b.second;
    }
    void example()
    {
        vector<pair<int,int>> vec;
        vec.push_back(pair<int,int>(1,10));
        vec.push_back(pair<int,int>(9,50));
        vec.push_back(pair<int,int>(8,20));
        vec.push_back(pair<int,int>(8,10));
        vec.push_back(pair<int,int>(7,40));
        for (size_t i = 0; i < vec.size(); ++i) {
            pair<int,int> item = vec[i];
            cout << item.first << " " << item.second << endl;
        }
        sort(vec.begin(), vec.end(), VecCmp);
        cout << "compare" << endl;
        for (size_t i = 0; i < vec.size(); ++i) {
            pair<int,int> item = vec[i];
            cout << item.first << " " << item.second << endl;
        }
    }
};

输出:

1 10
9 50
8 20
8 10
7 40
compare
1 10
7 40
8 10
8 20
9 50

 

2. 组合pair:

class PairSotion {
public:
    static bool VecCmp(pair<int,pair<int,int>> a, pair<int,pair<int,int>> b)
    {
        if (a.first != b.first) {
            return a.first < b.first;
        }
        pair<int,int> item1 = a.second;
        pair<int,int> item2 = b.second;
        if (item1.first != item2.first) {
            return item1.first < item2.first;
        }
        return item1.second < item2.second;
    }
    void example()
    {
        vector<pair<int,pair<int,int>>> vec;
        vec.push_back(pair<int,pair<int,int>>(1,pair<int,int>(0,0)));
        vec.push_back(pair<int,pair<int,int>>(3,pair<int,int>(9,8)));
        vec.push_back(pair<int,pair<int,int>>(9,pair<int,int>(7,7)));
        vec.push_back(pair<int,pair<int,int>>(8,pair<int,int>(5,6)));
        vec.push_back(pair<int,pair<int,int>>(8,pair<int,int>(5,3)));
        vec.push_back(pair<int,pair<int,int>>(5,pair<int,int>(2,7)));
        vec.push_back(pair<int,pair<int,int>>(5,pair<int,int>(2,5)));
        vec.push_back(pair<int,pair<int,int>>(2,pair<int,int>(3,3)));

        for (size_t i = 0; i < vec.size(); ++i) {
            pair<int,pair<int,int>> item = vec[i];
            pair<int,int> pos = item.second;
            cout << item.first << " " << pos.first<<":"<<pos.second << endl;
        }
        sort(vec.begin(), vec.end(), VecCmp);
        cout << "compare" << endl;
        for (size_t i = 0; i < vec.size(); ++i) {
            pair<int,pair<int,int>> item = vec[i];
            pair<int,int> pos = item.second;
            cout << item.first << " " << pos.first<<":"<<pos.second << endl;
        }
    }
};

输出:

1 0:0
3 9:8
9 7:7
8 5:6
8 5:3
5 2:7
5 2:5
2 3:3
compare
1 0:0
2 3:3
3 9:8
5 2:5
5 2:7
8 5:3
8 5:6
9 7:7

 

posted on 2022-03-26 16:24  蜀山菜鸟  阅读(180)  评论(0)    收藏  举报