C++中pair的用法總結(jié)
?pair的簡(jiǎn)介
pair是C++STL(標(biāo)準(zhǔn)模板庫(kù))中的一個(gè)現(xiàn)有容器,它將2個(gè)數(shù)據(jù)整合成一組數(shù)據(jù),當(dāng)我們類(lèi)似需求的時(shí)候就可以使用到pair啦!pair其實(shí)有點(diǎn)像Python中字典中的鍵值對(duì)(Key-Value),一個(gè)Key對(duì)應(yīng)著一個(gè)Value。pair的本質(zhì)其實(shí)就是個(gè)結(jié)構(gòu)體,它含有兩個(gè)成員變量first和second。因?yàn)槭褂玫氖莝truct不是class,所以在定義后是可以直接使用pair中的成員變量的。
其標(biāo)準(zhǔn)庫(kù)類(lèi)型–pair類(lèi)型定義在#include< utility >
頭文件中
#include<utility>
類(lèi)模板
:
template<class T1,class T2> struct pair
參數(shù):
T1為第一個(gè)元素的數(shù)據(jù)類(lèi)型,T2為第二個(gè)元素的數(shù)據(jù)類(lèi)型。功能:
pair將一對(duì)值(T1和T2)整合為一組數(shù)據(jù),這一對(duì)值的數(shù)據(jù)類(lèi)型可以相同也可以不相同(由我們自己指定),訪(fǎng)問(wèn)pair中的兩個(gè)數(shù)據(jù)的值可以通過(guò)變量名.first
和變量名.second
來(lái)實(shí)現(xiàn)。
例:
#include<utility> #include<iostream> using namespace std; int main() { pair<string,string>s1; s1.first="ctx"; s1.second="666"; cout<<s1.first<<endl; cout<<s1.second<<endl; cout<<s1.first<<s1.second<<endl; }
?pair的定義及初始化
在定義一個(gè)類(lèi)型為pair的對(duì)象時(shí)最主要的點(diǎn)就是在定義時(shí)需要提供兩個(gè)數(shù)據(jù)類(lèi)型,且兩個(gè)數(shù)據(jù)類(lèi)型不必相同。
值得一提的是,pair中的數(shù)據(jù)類(lèi)型也可以是C++STL中的自帶的容器。
//定義 pair<int,int>p1; //定義一個(gè)pair類(lèi)型的空對(duì)象p1,兩個(gè)元素的數(shù)據(jù)類(lèi)型都是int pair<int,double>p2; //定義一個(gè)pair類(lèi)型的空對(duì)象p2,一個(gè)元素的數(shù)據(jù)類(lèi)型都是int,另一個(gè)是double pair<double,string>p3; //定義一個(gè)pair類(lèi)型的空對(duì)象p3,一個(gè)元素的數(shù)據(jù)類(lèi)型都是double,另一個(gè)是string pair<string,vector<int> >p4; //定義一個(gè)pair類(lèi)型的空對(duì)象p4,一個(gè)個(gè)元素的數(shù)據(jù)類(lèi)型都是string,另一個(gè)是vector容器
當(dāng)然(of course),我們也可以在定義一個(gè)pair類(lèi)型的對(duì)象時(shí)對(duì)它進(jìn)行初始化
賦值。
//初始化 pair<string,string> p1("ctx","666"); //定義一個(gè)pair類(lèi)型的對(duì)象p1并初始化,兩個(gè)元素的類(lèi)型都是string,初識(shí)默認(rèn)值為ctx和666 pair<string,int> p2("ctx",18); //定義一個(gè)pair類(lèi)型的對(duì)象p3并初始化,兩個(gè)元素的類(lèi)型分別是string和int,初識(shí)默認(rèn)值為ctx和18 pair<string,int> p3(p2); //拷貝p2的值來(lái)初始化p3 pair<string,int> p3=p2; //將p2的值賦值給p3
?typedef簡(jiǎn)化pair
pair容器的存在在一定程度上方便了我們,但是如果我們需要同時(shí)定義多個(gè)相同pair類(lèi)型的對(duì)象的時(shí)候正常定義的話(huà)是不是就顯得有些繁瑣了呢,所以我們可以使用到typedef關(guān)鍵字
來(lái)簡(jiǎn)化定義。
//typedef簡(jiǎn)化pair的定義 typedef pair<string,string> replace; replace c1("ctx","666"); replace c2("hhxx","ttxs"); cout<<c1.first<<c1.second<<endl; cout<<c2.first<<c2.second<<endl;
?pair中的make_pair
一般make_pair都使用在需要pair做參數(shù)的位置,可以直接調(diào)用make_pair生成pair對(duì)象
。 另一個(gè)使用的方面就是pair可以接受隱式
的類(lèi)型轉(zhuǎn)換,這樣可以獲得更高的靈活度。
pair<int,double> p1; p1 = make_pair(18,1.78); cout<<p1.first<<" "<<p1.second<<endl; //輸出為18 1.78 pair<int,double> p2; int m = 18; double n = 1.78; p2 = make_pair(m,n); cout<<p2.first<<" "<<p2.second<<endl; //輸出為18 1.78 std::pair<int, float>(18, 1.78); std::make_pair(18, 1.78); 第一個(gè)的second變量是float類(lèi)型 而make_pair函數(shù)會(huì)將second變量都轉(zhuǎn)換成double類(lèi)型。
?pair的真題鞏固
下面是PTA中團(tuán)體程序設(shè)計(jì)天梯賽-練習(xí)集的一道L2二階題目,難度不大,在學(xué)完本文后正好合適拿來(lái)給大家練練手!
下方為題目鏈接?。。。。。。?!
--------------------L2-042 老板的作息表--------------------
新浪微博上有人發(fā)了某老板的作息時(shí)間表,表示其每天 4:30 就起床了。但立刻有眼尖的網(wǎng)友問(wèn):這時(shí)間表不完整啊,早上九點(diǎn)到下午一點(diǎn)干啥了?
本題就請(qǐng)你編寫(xiě)程序,檢查任意一張時(shí)間表,找出其中沒(méi)寫(xiě)出來(lái)的時(shí)間段。
輸入格式:
輸入第一行給出一個(gè)正整數(shù) N,為作息表上列出的時(shí)間段的個(gè)數(shù)。隨后 N 行,每行給出一個(gè)時(shí)間段,格式為:
hh:mm:ss - hh:mm:ss
其中 hh、mm、ss 分別是兩位數(shù)表示的小時(shí)、分鐘、秒。第一個(gè)時(shí)間是開(kāi)始時(shí)間,第二個(gè)是結(jié)束時(shí)間。題目保證所有時(shí)間都在一天之內(nèi)(即從 00:00:00 到 23:59:59);每個(gè)區(qū)間間隔至少 1 秒;并且任意兩個(gè)給出的時(shí)間區(qū)間最多只在一個(gè)端點(diǎn)有重合,沒(méi)有區(qū)間重疊的情況。
輸出格式:
按照時(shí)間順序列出時(shí)間表中沒(méi)有出現(xiàn)的區(qū)間,每個(gè)區(qū)間占一行,格式與輸入相同。題目保證至少存在一個(gè)區(qū)間需要輸出。
輸入樣例:
8
13:00:00 - 18:00:00
00:00:00 - 01:00:05
08:00:00 - 09:00:00
07:10:59 - 08:00:00
01:00:05 - 04:30:00
06:30:00 - 07:10:58
05:30:00 - 06:30:00
18:00:00 - 19:00:00
輸出樣例:
04:30:00 - 05:30:00
07:10:58 - 07:10:59
09:00:00 - 13:00:00
19:00:00 - 23:59:59
AC代碼:
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; vector<pair<string,string>>pr; string s1,s2; char c; for(int i=0;i<n;i++) { cin>>s1>>c>>s2; pr.push_back({s1,s2}); } pr.push_back({"23:59:59",""}); pr.push_back({"","00:00:00"}); sort(pr.begin(),pr.end()); for(int i=0;i<pr.size()-1;i++) { if(pr[i].second!=pr[i+1].first) cout<<pr[i].second<<" - "<<pr[i+1].first<<endl; } }
?寫(xiě)在最后
OK本文的學(xué)習(xí)就到此結(jié)束啦,希望本文可以幫助到各位有需要的小伙伴們喔,也希望各位小伙伴們不要吝惜手里的三連哦!??????
以上就是C++中pair的用法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于C++ pair用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++?OpenCV實(shí)現(xiàn)物體尺寸測(cè)量示例詳解
本文主要介紹了利用OpenCV對(duì)物體的尺寸進(jìn)行測(cè)量,即先定位到待測(cè)物體的位置,然后測(cè)量物體的寬高。感興趣的同學(xué)可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)2022-01-01C語(yǔ)言JNI的動(dòng)態(tài)注冊(cè)詳解
這篇文章主要介紹了JAVA JNI的動(dòng)態(tài)注冊(cè),這里提供簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下,小編覺(jué)得寫(xiě)的還不錯(cuò),希望能給你帶來(lái)幫助2021-08-08C語(yǔ)言基礎(chǔ)解析之分支與循環(huán)語(yǔ)句
C語(yǔ)言是一門(mén)結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,當(dāng)C語(yǔ)言用來(lái)描述生活中的事物時(shí),會(huì)用到三種結(jié)構(gòu):順序結(jié)構(gòu)(不去贅述),選擇結(jié)構(gòu)(對(duì)應(yīng)分支語(yǔ)句),循環(huán)結(jié)構(gòu)(對(duì)應(yīng)循環(huán)語(yǔ)句),分支語(yǔ)句:分支語(yǔ)句分為兩種,一種是if語(yǔ)句,一種是switch語(yǔ)句2021-09-09Matlab計(jì)算變異函數(shù)并繪制經(jīng)驗(yàn)半方差圖詳解
這篇文章主要為大家詳細(xì)介紹了基于MATLAB求取空間數(shù)據(jù)的變異函數(shù),并繪制經(jīng)驗(yàn)半方差圖的方法。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-04-04C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單彈跳球游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單彈跳球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod詳解
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02