假設我有一個map<string, vector<int>>
,名爲my_map
,我想將42
與密鑰"foo"
關聯。從Java未來我希望有做這樣的事情添加到具有可變值的地圖
if (my_map.find("foo") != my_map.end()) {
my_map["foo"].push_back(42);
} else {
vector<int> my_vector;
my_map["foo"] = my_vector;
my_vector.push_back(42);
}
出乎我的意料,我發現我可以做
my_map["foo"].push_back(42);
這是如何工作的?如果地圖值的類型沒有沒有參數的構造函數,my_map["foo"]
會做什麼?假設你想以除使用空構造函數以外的方式初始化所有值?在Java中,我可以做
map.computeIfAbsent("foo", **some supplier of Vectors**).add(42);
C++中是否有等價物?
'vector my_vector; my_map [「foo」] = my_vector; my_vector.push_back(42);'在你的'else'中,你想要做什麼? –
容器存儲副本。 C++不是Java,並非所有東西都是參考.... – user463035818
我認爲會發生什麼事情是,當您嘗試插入元素(如果未找到「foo」)時會創建新的地圖單元格。在創建期間向量的默認構造函數被稱爲已經爲您創建一個空矢量 – Stefano