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
浙公网安备 33010602011771号