pair 数对🍗
pair是一个模板类,使用时需要引用文件
#include <utility>//通用工具
pair可将两个value处理为一个元素。C++标准库内多处用到了这个结构。尤其容器 map、unordered_map和unordered_multimap就是使用pair来管理其内部元素(key_value),任何函数如果需返回两个 value,也需要用到pair,例如minmax()。
pair是定义在std中的struct,其成员是公有的(public)。
namespace std {template <typename T1,typename T2>struct pair {T1 first; //成员1T2 second;//成员2...};
}
操作函数🍗
pair<T1,T2> p
创建一个空的pair数对,两个成员都是T1,T2的默认值
pair<T1,T2>p(val1,val2)
创建一个pair数对,以val1和val2为其初值
pair<T1,T2>p2(p1)
利用拷贝构造创建p2
p2 = p1
把p1的值赋值给p2
make_pair(val1,val2)
返回一个由val1和val2构造的pair数对
p.first
访问p的第一个成员
p.second
访问p的第二个成员
get<0>§
等价p.first
get<1>§
等价p.second
p1 == p2
判断两个pair是否相等
p1 != p2
判断两个pair是否不相等
,>=,<,<=
判断两个pair的大小关系(先比较first,如果相等再比较second)
p1.swap(p2)
交换两个pair的元素
pair应用举例🍗
pair的基本操作举例:
#include <utility>
using namespace std;int main()
{pair<int, double>p1;//创建一个空的pair//注意访问first和second时没有()cout << "p1=(" << p1.first << "," << p1.second <<")" << endl;pair<int, double>p2(10,23.4);//创建一个pair,数据为(10,23.4)cout << "p2=(" << p2.first << "," << p2.second << ")" << endl;pair<int, double>p3(p2);//通过p2拷贝构造一个p3p3.first = 100;cout << "p3=(" << p3.first << "," << p3.second << ")" << endl;p1 = p3;//把p3赋值给p1cout << "p1 = p3后" << endl;cout << "p1=(" << p1.first << "," << p1.second << ")" << endl;p3 = make_pair(100,200);cout << "p3 = make_pair(100,200)后" << endl;//通过get访问p3的成员cout << "p3=(" << get<0>(p3) << "," << get<1>(p3) << ")" << endl;return 0;
}
#include <utility>
using namespace std;
pair<int, int> MinMax(int* arr, int len)//找到数组的最小值和最大值{int min = arr[0]; //最小值 int max = arr[0];//最大值 for (int i = 1; i < len; i++) {if (arr[i] < min) min = arr[i]; if (arr[i] > max) max = arr[i]; }return make_pair(min,max);
}int main()
{int arr[] = {3,1,8,9,34,2,67,5,70,12,34,65,99,20}; auto p = MinMax(arr,sizeof(arr)/sizeof(arr[0])); cout << "最小值:" << p.first << ",最大值:" << p.second << endl; return 0;
本篇完!🍗