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