博主簡介:
Hello大家好呀,我是陳童學(xué),一個與你一樣正在慢慢前行的人。
博主主頁:@陳童學(xué)哦
所屬專欄:C++STL
前言:
Hello各位小伙伴們好!歡迎來到本專欄C++STL的學(xué)習(xí),本專欄旨在幫助大家了解并熟悉使用C++中的STL,C++中的STL(標(biāo)準(zhǔn)模板庫)是相當(dāng)好用的,??????所以大家趕緊訂閱一起學(xué)起來叭!那么話不多說接下來就進(jìn)入本文C++中pair的學(xué)習(xí)。
?pair的簡介
pair是C++STL(標(biāo)準(zhǔn)模板庫)中的一個現(xiàn)有容器,它將2個
數(shù)據(jù)整合成一組
數(shù)據(jù),當(dāng)我們類似需求的時候就可以使用到pair啦!pair其實(shí)有點(diǎn)像Python中字典中的鍵值對(Key-Value)
,一個Key對應(yīng)著一個Value。pair的本質(zhì)其實(shí)就是個結(jié)構(gòu)體
,它含有兩個成員變量first和second。因?yàn)槭褂玫氖莝truct不是class,所以在定義后是可以直接使用pair中的成員變量的。
其標(biāo)準(zhǔn)庫類型–pair類型定義在#include< utility >
頭文件中
#include<utility>
類模板
:
template<class T1,class T2> struct pair
參數(shù):
T1為第一個元素的數(shù)據(jù)類型,T2為第二個元素的數(shù)據(jù)類型。功能:
pair將一對值(T1和T2)整合為一組數(shù)據(jù),這一對值的數(shù)據(jù)類型可以相同也可以不相同(由我們自己指定),訪問pair中的兩個數(shù)據(jù)的值可以通過變量名.first
和變量名.second
來實(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的定義及初始化
在定義一個類型為pair的對象時最主要的點(diǎn)就是在定義時需要提供兩個數(shù)據(jù)類型,且兩個數(shù)據(jù)類型不必相同。
值得一提的是,pair中的數(shù)據(jù)類型也可以是C++STL中的自帶的容器。
//定義
pair<int,int>p1; //定義一個pair類型的空對象p1,兩個元素的數(shù)據(jù)類型都是int
pair<int,double>p2; //定義一個pair類型的空對象p2,一個元素的數(shù)據(jù)類型都是int,另一個是double
pair<double,string>p3; //定義一個pair類型的空對象p3,一個元素的數(shù)據(jù)類型都是double,另一個是string
pair<string,vector<int> >p4; //定義一個pair類型的空對象p4,一個個元素的數(shù)據(jù)類型都是string,另一個是vector容器
當(dāng)然(of course),我們也可以在定義一個pair類型的對象時對它進(jìn)行初始化
賦值。
//初始化
pair<string,string> p1("ctx","666"); //定義一個pair類型的對象p1并初始化,兩個元素的類型都是string,初識默認(rèn)值為ctx和666
pair<string,int> p2("ctx",18); //定義一個pair類型的對象p3并初始化,兩個元素的類型分別是string和int,初識默認(rèn)值為ctx和18
pair<string,int> p3(p2); //拷貝p2的值來初始化p3
pair<string,int> p3=p2; //將p2的值賦值給p3
?typedef簡化pair
pair容器的存在在一定程度上方便了我們,但是如果我們需要同時定義多個相同pair類型的對象的時候正常定義的話是不是就顯得有些繁瑣了呢,所以我們可以使用到typedef關(guān)鍵字
來簡化定義。
//typedef簡化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對象
。 另一個使用的方面就是pair可以接受隱式
的類型轉(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);
第一個的second變量是float類型
而make_pair函數(shù)會將second變量都轉(zhuǎn)換成double類型。
?pair的真題鞏固
下面是PTA中團(tuán)體程序設(shè)計(jì)天梯賽-練習(xí)集的一道L2二階題目,難度不大,在學(xué)完本文后正好合適拿來給大家練練手!
下方為題目鏈接?。。。。。。。?br>--------------------L2-042 老板的作息表--------------------
新浪微博上有人發(fā)了某老板的作息時間表,表示其每天 4:30 就起床了。但立刻有眼尖的網(wǎng)友問:這時間表不完整啊,早上九點(diǎn)到下午一點(diǎn)干啥了?
本題就請你編寫程序,檢查任意一張時間表,找出其中沒寫出來的時間段。
輸入格式:
輸入第一行給出一個正整數(shù) N,為作息表上列出的時間段的個數(shù)。隨后 N 行,每行給出一個時間段,格式為:
hh:mm:ss - hh:mm:ss
其中 hh、mm、ss 分別是兩位數(shù)表示的小時、分鐘、秒。第一個時間是開始時間,第二個是結(jié)束時間。題目保證所有時間都在一天之內(nèi)(即從 00:00:00 到 23:59:59);每個區(qū)間間隔至少 1 秒;并且任意兩個給出的時間區(qū)間最多只在一個端點(diǎn)有重合,沒有區(qū)間重疊的情況。
輸出格式:
按照時間順序列出時間表中沒有出現(xiàn)的區(qū)間,每個區(qū)間占一行,格式與輸入相同。題目保證至少存在一個區(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;
}
}
?寫在最后
OK本文的學(xué)習(xí)就到此結(jié)束啦,希望本文可以幫助到各位有需要的小伙伴們喔,也希望各位小伙伴們不要吝惜手里的三連哦!??????
??
回頭看,輕舟已過萬重山,向前看,前路漫漫亦漫漫。
文章來源:http://www.zghlxwxcb.cn/news/detail-456043.html
??????那么我們下期再見!拜拜ヾ(?ω?`)o文章來源地址http://www.zghlxwxcb.cn/news/detail-456043.html
到了這里,關(guān)于C++中pair用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!