C primer 關聯容器之map

2021-07-08 13:40:26 字數 3192 閱讀 4528

先來一道程式看看吧。程式如下如題目要求是定義乙個map,將單詞與乙個行號的list關聯,list中儲存單詞出現的行號、現在繼續

//定義乙個map,將單詞與乙個行號的list關聯,list中儲存單詞出現的行號

其中本來答案中需要in檔案流繫結,我卻用了兩個cin來控制檔案輸入單詞以及行號控制。在這裡需要注意的是cin的狀態,在我們按下一次ctrl+z後cin狀態已經為false了也就是說,在後面再有cin>>word這個語句是無效的,在這樣的情況下,需要對cin的狀態進行恢復,也就是**中的cin.clear();

對於map

find是查詢關鍵字在容器中出現的位置,而count還會統計關鍵字出現的次數,因此:

程式設計練習,編寫程式,定義乙個作者及其相關作品的multimap,使用find在容器內查詢乙個元素並用erase刪除他,確保就算容器內沒有這個元素也能執行成功。

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

void remove_author(multimap

&book, const

string &author)//刪除某個作者及其所對映的書,可以理解成某個作者犯事了,然後被要求,這個作者的書必須的下架。就是這麼個意思

else

book.erase(pos.first, pos.second);

}void print_books(multimap

&book)

cout

<< endl;

}int main(int argc, char **argv)

for (auto v:data)

*/multimap

books;

books.insert();

books.insert();

books.insert();

print_books(books);

remove_author(books,"忘語");

print_books(books);

system("pause");

return

0;}

執行結果如下:

1. 這裡做的操作就是插入三本書,輸出,刪除一本書,在輸出的效果。

2. 在這裡還可以使用find和lower_bound、upper_bound也可以實現目標,但是相對而言沒有上文簡單

#include 

using

std::map;

#include

using

std::string;

#include

using

std::pair;

#include

using

std::size_t;

#include

using

std::cin; using

std::cout; using

std::endl;

int main()

return

0;}

上述**是c++primer最後一題的標準答案,由此可以看出人家總體的風格較好,比我這個菜鳥水平好多了,考慮的也很周全。

#include 

#include

#include

#include

#include

#include

#include

using

std::map; using

std::string; using

std::vector;

using

std::ifstream; using

std::cout; using

std::endl;

using

std::getline;

using

std::runtime_error; using

std::istringstream;

map buildmap(ifstream &map_file)

const

string &

transform(const

string &s, const

map &m)

// first argument is the transformations file;

// second is file to transform

void word_transform(ifstream &map_file, ifstream &input)

cout

<< endl; // done with this line of input

}}int main(int argc, char **argv)

//其實**風格也沒有多好,如果仔細看的話。就先這樣吧。

c primer 關聯容器 map

map 是鍵 值對的集合。map型別通常可以理解為關聯陣列,其本質在於元素的值和某個特定的鍵向關聯,而非通過元素在陣列中的位置來獲取 宣告與定義 mapm mapword count 迭代器 map iterator it 對鍵型別的約束 鍵型別必須支援 操作符 map定義的型別 1.迭代器進行解引...

C primer 關聯容器

pairp1 pairp1 v1,v2 v1為t1型別,v2為t2型別 make pair v1,v2 返回乙個pair物件 p.first p.second 關聯容器不能通過容器大小定義,不能用resize。mapm m2 mapm mapm b,e b,e為map迭代器。鍵必須支援 map ke...

STL關聯容器之map

map和set一樣,也是一種關聯容器,內部也是使用紅黑樹作為底層的實現結構。但是不同的是,map的鍵值和實值可以是不一樣的。map與set的查詢操作本質上是一樣的,沒有特殊的地方。map使用鍵值排列元素的位置,因而也不允許插入相同鍵值的元素,插入演算法返回pair iterator,bool 分別指...