Pair类模板

>Pair的实现是一个结构体而不是一个类<

1、标准头文件 #include<utility> 似乎无需引入该文件,在std命名空间内也有pair类型

2、格式为:template <class T1, class T2> struct pair;

在现实情况中我们可以像类似于STL创建新容器一样创建pair也可以直接使用,如下:

1 pair<int,int> p;
2 pair<int,int> p(10,20);

或者是:

1 map<char,int> m;
2     m.insert(pair<char,int>(‘a‘,10));

3、访问方式

对与pair中的两个元素,我们可以使用first和second来进行访问,顾名思义first返回第一个元素,而second返回第二个元素,如:

1 pair<int,int> p(10,20);
2     cout<<p.first<<" "<<p.second<<endl;

4、make_pair:

函数原型template pair make_pair(T1 a, T2 b) { return pair(a, b); }

我们可以通过make_pair生成我们的所需要的pair,对于一般的pair而言,我们如果需要对其进行赋值,则需要:

1 pair<int,int> p;
2     p.first=10,p.second=20;

但如果我们使用make_pair方法,则可以变成如下内容:

1 pair<int,int> p;
2     p=make_pair(10,20);

make_pair本身是接受隐式类型转换的,比如定义的是一个int类型,使用make_pair传入一个float类型的参数,make_pair不会报错,而是回自动的进行一个类型转换,将float变为int,这样可以获得更高的灵活度,同时也会有一些小问题。

5、pair类型实现函数多个返回值

 1 #include<iostream>
 2 #include<string>
 3 #include<utility>
 4
 5 using namespace std;
 6
 7 pair<string,int> getClass(int id){
 8     return make_pair("DOTCPP!",id);
 9 }
10
11 int main(int argc,char **argv){
12     pair<string,int> a;
13     a=getClass(10);
14     cout<<a.first<<" "<<a.second<<endl;
15     return 0;
16 }

输出为:DOTCPP! 10

原文地址:https://www.cnblogs.com/savennist/p/12230243.html

时间: 2025-01-12 21:15:49

Pair类模板的相关文章

4.1 pair类模板

在学习关联容器之前,首先先要了解一下STL中的pair类模板,因为关联容器的一些成员函数返回值都是pair对象,而且map 和multimap中的元素都是pair对象. 1)pair类模板定义 pair实例化出来以后的类都有两个成员变量,一个是first,另一个是second. STL中还有一个make_pair()函数模板,可以返回一个pair模板对象.源码如下: template<class T1, class T2> pair<T1,T2>make_pair(T1 x, T2

C++ STL pair类模板

关联容器的一些成员函数的返回值是 pair 对象,而且 map 和 multimap 容器中的元素都是 pair 对象.pair 的定义如下: template <class_Tl, class_T2> struct pair { _T1 first; _T2 second; pair(): first(), second() {} //用无参构造函数初始化 first 和 second pair(const _T1 &__a, const _T2 &__b): first(_

初步C++类模板学习笔记

类模板 实现:在上课时间的定义给它的一个或多个参数,这些参数代表了不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定參数, 由编译系统依据參数提供的数据类型自己主动产生对应的模板类                   -->详细的类. 类模板的定义 C++的类模板的写法例如以下: template <类型參数表> //类型參数表的写法就是:class 类型參数1, class 类型參数2, - class 类模板名

连分数(分数类模板) uva6875

1 //连分数(分数类模板) uva6875 2 // 题意:告诉你连分数的定义.求连分数,并逆向表示出来 3 // 思路:直接上分数类模板.要注意ai可以小于0 4 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <cstdio> 9 #include <vector> 10 #include <cmath> 11 #inclu

函数、类模板

泛型程序设计 算法实现时不指定具体要操作的数据的类型.适用于多种数据结构. 函数模板 Template <class 类型参数1,class类型参数2,…..> 返回值类型 模板名(形参表) { 函数体: } 函数模板可以重载,只要它们的形参表不同即可. C++编译器遵循以下优先顺序: 先找参数完全匹配的普通函数(非由模板实例化而得的函数) 再找参数完全匹配的模板函数 再找实参经过自动类型转换后能匹配的普通函数 上面的都不符合则报错. 可以在函数模板中使用多个类型参数,可以避免二义性. #in

C++学习笔记50:队列类模板

队列是只能向一端添加元素,从另一端删除元素的线性群体 循环队列 在想象中将数组弯曲成环形,元素出队时,后继元素不移动,每当队尾达到数组最后一个元素时,便再回到数组开头. 队列类模板 //Queue.h #ifndef QUEUE_H #define QUEUE_H #include <cassert> //类模板的定义 template <class T, int SIZE = 50> class Queue { private: int front, rear, count; T

C++ 类模板三(类模版中的static关键字)

//类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在利用类模板生成类的时候会为每个类生成一个static变量 那么对于类中的static关键字就非常好理解了 static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量 类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化 这时候还没有通

c++类模板之间友元函数调用

1 #include <stdio.h> 2 #include <iostream> 3 4 using namespace std; 5 6 template<typename T> class BTree; 7 8 /***************************节点类模板*********************************/ 9 template<typename T> 10 class BTreeNode{ 11 friend

C++类模板的使用

面向对象: 设计和实现一个C++类模板,来提供一种采用数组来存储的.元素为任意类型的环形队.要求提供的操作:加入元素:提取元素:返回环形队允许存储的元素个数最大值:返回当前的有效元素个数. #include<iostream> #include<cstring> using namespace std; template<class Type> class Queue { private: int front; int rear; Type *item; int len