第十一章 11 3 5節練習

2021-06-25 08:54:03 字數 1884 閱讀 7638

練習11.27

對於什麼問題你會用count來解決?

什麼時候你又會選擇find呢?

解答:【引用】應該使用哪個操作依賴與我們要解決什麼問題。如果我們所關心的只不過是乙個特定元素是否已在容器中,可能find是最佳的選擇。對於不允許重複關鍵字的容器,可能使用find還是count沒有什麼區別。但對於允許重複關鍵字的容器,count還會做更多的工作:如果元素在容器中,他還會統計有多少個元素有相同的關鍵字。如果不需要計數,最好使用find。

練習11.28

對乙個string到int的vector的map,定義並初始化乙個變數來儲存在其上呼叫find所返回的結果。

解答:

map> ref_map;

// ... do something

map>::iterator iter = ref_map.find("hello");

練習11.29

如果給定的關鍵字不在容器中,upper_bound、lower_bound和equal_range分別會返回什麼?

解答:upper_bound和lower_bound的結果是一樣的,返回尾後迭代器,也就是c.end()指向的迭代器。

equal_range會返回乙個pair,且pair的兩個成員均等於c.end()

練習11.30

對於本節最後乙個程式中的輸出表示式,解釋運算物件pos.first->second的含義。

解答:當關鍵字存在時,equal_range將會返回乙個迭代器pair。第乙個迭代器指向第乙個與關鍵字匹配的元素,第二個迭代器指向最後乙個匹配元素之後的位置。

所以,這裡pos.first指向的就是第乙個與關鍵字匹配的元素的迭代器,pos.first->second就是對這個key進行對映值的獲取。

練習11.31

編寫程式,定義乙個作者及其座屏的multimap。使用find在multimap中查詢乙個元素並用erase刪除它。

確保你的程式在元素不在map中也能正常執行。

解答:

#include #include #include using namespace std;

void init_map(multimap&map_));

map_.insert();

map_.insert();

map_.insert();

map_.insert();

map_.insert();

map_.insert();

}void searchbook(multimap&map_, string author_name)

else

}int main()

練習11.32

使用上一題定義的multimap編寫乙個程式,按字典序列印作者列表和他們的作品。

解答:

#include #include #include #include using namespace std;

void init_map(multimap&map_));

map_.insert();

map_.insert();

map_.insert();

map_.insert();

map_.insert();

map_.insert();

}void setprint(const multimap& map_)

for (auto iter = authors.cbegin(); iter != authors.cend(); ++iter)

for (auto i : books)

books.clear(); }}

int main()

這裡用了set容器來解決排序和除重的工作。當然,范型中的演算法也是可以辦到的。

第十一章 11 2 3節練習

練習11.12 編寫程式,讀入string和int的序列,將每個string和int存入乙個pair中,pair儲存在乙個vector中。解答 include include include include include using namespace std int main auto sfir...

第十一章 11 3 6節練習

練習11.33 實現你自己版本的單詞轉換程式。解答 include include include include include using namespace std mapbuildmap ifstream map file else return trans map const string...

第十一章 11 4節練習

練習11.37 乙個無序容器與其有序容器版本相比有何優勢?有序版本有何優勢?解答 在關鍵字型別的元素沒有明顯的有序關係的情況下,無序容器是非常有用的。在某些應用中,維護元素的序代價非常高昂,此事無需容器也很有用。雖然理論上雜湊技術能獲得更好的平均效能,但在實際中想要達到很好的效果還需要進行一些效能測...