2016-04-23 69 views
1

假設我定義的全局地圖 -添加一鍵標準::地圖,而值

map<int,list<char>> cMap; 

有沒有辦法(不使用boost),我可以添加整數鍵,後來在程序中添加值到與它們相對應的列表中?

map<int,list<char>> cmap; 

int main() 
{ 

// Add only a value this way? 
cmap[2]; 

// and then - 
cmap[2].push_back('A'); 
return 0; 
} 
+0

你已經有什麼問題了?對我來說看起來很好。 –

回答

7

你已經在做它。

當您編寫cmap[2],並且該元素不存在時,它將被創建並進行默認構建。

因此,cmap[2]將是一個空的列表。然後,只要你喜歡,你可以.push_back

由於這個過程也是由cmap[2].push_back(..)中的cmap[2]觸發的,所以實際上並不需要初始「空白」初始化,除非項目中有一些關鍵要求從開始就存在於地圖中(在這種情況下, 很公平)。

如果你不想空列表是價值,但爲了有沒有價值,我認爲這是愚蠢的,但你有一些選擇:

  • 不要添加的關鍵,要麼
    (讓表示缺少的值);
  • 商店std::unique_ptr<std::list<char>>nullptr
    開始(;動態分配沒有充分的理由,議員!不,謝謝);
  • 商店std::optional<std::list<char>>cmap[2] = std::none
    (當Boost.Optional使得它成爲C++,它發生,但慢慢地)開始。

&hellip;而已。

+0

謝謝。但我不明白如果我在'cmap [2] .push_back('A');'之後再添加另一個'cmap [2];'會發生什麼?清單會發生什麼? –

+0

@AlexGoft什麼都不會發生。從這個答案中:「當你編寫'cmap [2]',**並且該元素不存在時,**它被創建並且默認構建。」當你編寫'cmap [2]',並且該元素確實存在時,你只需獲取該值。由於您對此不做任何處理,因此列表中的所有項目都將保留在列表中。 – hvd

+0

@AlexGoft''A''將被推入列表中 –