1. 簡介
Pair表示“一對”的意思,pair將兩個數(shù)據(jù)合成一組數(shù)據(jù),在如下兩種變成情況中,我們更加常見與使用pair,第一是使用STL中的map(在上一節(jié)講過),對于map而言,key和value需要分開來進(jìn)行使用和聲明,使用pair可以合二為一(但是數(shù)據(jù)輸出時依舊要分離),第二則是當(dāng)我們的函數(shù)需要返回兩個數(shù)據(jù)的時候,可以使用pair。
Pair的實(shí)現(xiàn)是一個結(jié)構(gòu)體而不是一個類因此可以直接使用pair的成員變量。
總結(jié)一下:pair將一對值(可以有不同的數(shù)據(jù)類型)和為一個值
2. 相關(guān)頭文件
標(biāo)準(zhǔn)頭文件 #include<utility>。
但是筆者親測在編譯器可以不聲明這個頭文件而直接使用,貌似在C++中,pair被放入了std命名空間中了。
3. 初始化
格式為:
template <class T1, class T2> struct pair;
在現(xiàn)實(shí)情況中我們可以像類似于STL創(chuàng)建新容器一樣創(chuàng)建pair也可以直接使用,如下:
pair<int,int> p; pair<int,int> p(10,20);
或者是:
map<char,int> m; m.insert(pair<char,int>('a',10));
明白了如何初始化,接下來談一下如何使用以及方法。
對與pair中的兩個元素,我們可以使用first和second來進(jìn)行訪問,顧名思義first返回第一個元素,而second返回第二個元素,如:
pair<int,int> p(10,20); cout<<p.first<<" "<<p.second<<endl;
4. make_pair:
函數(shù)原型template pair make_pair(T1 a, T2 b) { return pair(a, b); }
我們可以通過make_pair生成我們的所需要的pair,對于一般的pair而言,我們?nèi)绻枰獙ζ溥M(jìn)行賦值,則需要
pair<int,int> p; p.first=10,p.second=20;
但如果我們使用make_pair方法,則可以變成如下內(nèi)容:
pair<int,int> p; p=make_pair(10,20);
可以看見,使用make_pair不僅僅讓我們免去了對兩個變量進(jìn)行分開來的訪問賦值,同時make_pair也智能的接受變量的類型,不需要再度指定,也就是說,make_pair本身是接受隱式類型轉(zhuǎn)換的,比如定義的是一個int類型,使用make_pair傳入一個float類型的參數(shù),make_pair不會報錯,而是回自動的進(jìn)行一個類型轉(zhuǎn)換,將float變?yōu)閕nt,這樣可以獲得更高的靈活度,同時也會有一些小問題。
5.相關(guān)配套題目
1096題掃雷(注意,該題目為英文題)
與較難的BFS類型題目不同,本題不需要有BFS這樣的搜索思路,而且本題目涉及到一個重要的內(nèi)容,就是坐標(biāo),(x,y)在這類型的題目中,二維坐標(biāo)往往采用一對數(shù)據(jù)進(jìn)行表示,而本題目可以給自己增加要求,使用pair進(jìn)行坐標(biāo)的存儲運(yùn)算。
6. 舉例—函數(shù)多返回值:
#include<iostream> #include<string> #include<utility> using namespace std; pair<string,int> getClass(int id){ return make_pair("DOTCPP!",id); } int main(int argc,char **argv){ pair<string,int> a; a=getClass(10); cout<<a.first<<" "<<a.second<<endl; return 0; }
輸出內(nèi)容:
DOTCPP! 10
1096 | Minesweeper |
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程