考研複試系列 第十一節 map的使用

2021-07-28 08:19:35 字數 3064 閱讀 6083

在考研上機試題中,還是經常出現一些類如詞頻統計的問題的,解決這類問題通常使用雜湊表,在c++的stl當然提供了對其支援,比如c++中的hash_map。

在實際做題中,我們只需要使用map就ok了 。map與hashmap的用法基本一致,但底層實現是不同的,前者使用紅黑樹實現,後者使用雜湊表實現。

當然在做題中直接map就足夠了。所以這裡只記錄下map的使用方法。

#pragma warning(disable:4786)//消除4786警告

#include#include#includeusing namespace std;

int main()

下面來一道以前做過的acm的map的水題 。題目描述:

程式設計師astar不僅熱愛程式設計, 也熱愛運動, 最近,他所在的公司準備組織大家開展一些體育活動, 在此之前希望了解每個人所喜歡的體育運動有哪些, 擔任這次活動統計的程式設計師astar要求參與投票的每個人寫上自己最喜愛的3項體育運動, 並在最終結果中選出3項最受歡迎的(喜愛人數最多的前3名)作為這次活動準備開展的運動, 如果前3名中出現票數相同的, 則字母序較小的優先選擇。

輸入:輸入的第一行有乙個正整數n (n <= 100), 接下來的每一行有3個不相同的非空字串(每個字串只由小寫字母構成, 且長度都不大於10), 

代表了參與投票的人喜愛的3項運動。

sample input: 3

tennis basketball golf

tennis football basketball

badminton tennis chess

sample output:

badminton basketball tennis

**如下:

#pragma warning(disable:4786)

#include#include#include#includeusing namespace std;

bool cmp(const string a,const string b)

int main()

} int value[3];

for(i=0;i<3;i++)

else if(iter->second == value[i])//兩者值相等的話

}} mmap.erase(str[i]);//刪除已經找到的最大元素

} sort(str,str+3,cmp);//按字典需排列

cout《題目描述:

哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠呼叫任何乙個需要的魔咒,所以他需要你的幫助。

給你一部魔咒詞典。當哈利聽到乙個魔咒時,你的程式必須告訴他那個魔咒的功能;當哈利需要某個功能但不知道該用什麼魔咒時,你的程式要替他找到相應的魔咒。如果他要的魔咒不在詞典中,就輸出「what?」

輸入:首先列出詞典中不超過100000條不同的魔咒詞條,每條格式為:

[魔咒] 對應功能

其中「魔咒」和「對應功能」分別為長度不超過20和80的字串,字串中保證不包含字元「[」和「]」,且「]」和後面的字串之間有且僅有乙個空格。詞典最後一行以「@end@」結束,這一行不屬於詞典中的詞條。

詞典之後的一行包含正整數n(<=1000),隨後是n個測試用例。每個測試用例佔一行,或者給出「[魔咒]」,或者給出「對應功能」。

輸出:每個測試用例的輸出佔一行,輸出魔咒對應的功能,或者功能對應的魔咒。如果魔咒不在詞典中,就輸出「what?」

sample input:

[expelliarmus] the disarming charm

[rictusempra] send a jet of silver light to hit the enemy

[tarantallegra] control the movement of one's legs

[serpensortia] shoot a snake out of the end of one's wand

[lumos] light the wand

[obliviate] the memory charm

[expecto patronum] send a patronus to the dementors

[accio] the summoning charm

@end@ 4

[lumos]

the summoning charm

[arha]

take me to the sky

sample output:

light the wand

accio

what?

what?

#pragma warning(disable:4786)

#include#include#includeusing namespace std;

int main()

{ char cstr[100];

mapmmap1;//記錄魔咒-解釋

mapmmap2;//記錄解釋-魔咒

map::iterator iter;//迭代器

while(gets(cstr))

{ string sstr(cstr);

if(sstr == "@end@")

break;

int index = sstr.find(']');

string sstr1 = sstr.substr(0,index+1);//先記錄[和]

string sstr2 = sstr.substr(index+2);//除去空格

//cout<>n;

gets(cstr);//在cin後面跟著gets的話gets會把cin的\n識別為字串,所以進入迴圈之前先輸入一次(環境vc6)

while(n--)

{ gets(cstr);

string str(cstr);

if(str[0] == '[')//說明是魔法要查定義

{ iter = mmap1.find(str);

if(iter != mmap1.end())//如果找到

cout<

第十一節 過載 11

php4中已經有了過載的語法來建立對於外www.cppcns.com部物件模型的對映,就像j a和com那樣.php5帶來了強大的物件導向過載,允許程式設計師建立自定義的行為來訪問屬性和呼叫方法.過載可以通過 get,set,and call幾個特殊方法來進行.當zend引擎試圖訪問乙個成員並沒有找...

第十一節,命名空間namespace

命名空間可以把不同的方法分散到不同的檔案去實現,如果你會objective c,他的作用和裡面的類目有異曲同工之妙。當然了也有很多不同的地方,首先要明白的是,命名空間並不是乙個類,你擴充套件他的方法並不是和類目一樣在擴充套件乙個類的方法。如果你學過net開發,獲取你會對這個命名空間有更好的理解。na...

第十一節std atomic原子操作

互斥量 多執行緒程式設計中保護共享資料 鎖,操作共享資料,開鎖 有兩個執行緒,對乙個變數進行操作,這個執行緒讀,另乙個執行緒往變數中寫值。int atomvalue 5 讀執行緒a int tmpvalue atomvalue atomvalue代表的是多個執行緒之間要共享的變數寫執行緒b atom...