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; //成员1
T2 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拷贝构造一个p3
p3.first = 100;
cout << "p3=(" << p3.first << "," << p3.second << ")" << endl;
p1 = p3;//把p3赋值给p1
cout << "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;
本篇完!🍗