2010-03-04 49 views
2
std::map<std::string, int> m; 
// Can I make assumption that m["NoSuchKey"] will return 0? 
std::cout << m["NoSuchKey"] << std::endl; 
+0

相關,也許重複:http://stackoverflow.com/questions/2346481/an-initial-value-assumption-about-map-in-c/2346494 – GManNickG

+0

複製到精確的鍵/值類型。 – MSalters

回答

9

是的。當通過不存在的operator[]訪問項目時,它將使用默認構造的值創建並返回。

對於數值類型,默認構造的手段0

+3

Downvoter的原因? – GManNickG

3

是。如果未找到映射鍵,則會插入默認值。

具體來說,operator[] is understood as

(*((m.insert(value_type(k, data_type()))).first)).second 

翻譯成你的情況,m["NoSuchKey"]意味着

std::pair<std::string, int> pair_to_insert ("NoSuchKey", 0); 
// default value of int is 0. 
std::pair<std::map<std::string, int>::iterator, bool> 
    insert_res = m.insert(value_to_insert); 
std::map<std::string, int>::iterator iter_of_inserted_pair = insert_res.first; 
std::pair<std::string, int> inserted_pair = *iter_of_inserted_pair; 
int inserted_value = inserted_pair.second; 
return inserted_value; 

尤其m.insert如果鍵已經存在,返回舊鍵值對,而新的鍵 - 值對如果不是。因此,如果密鑰已存在,您將獲得預期值,如果不存在,則會獲得0(默認值)。

相關問題