[英]Swapping vs. assigning with std::map [] operator (const issue)
我目前正在std::map
上使用[]運算符:
map[key] = value;
沒什么太瘋狂的。 但是,我的值包含一個const公共成員:
class Value
{
public:
Value(int input) : member(input) { }
const int member;
};
沒有深入了解我的應用程序的細節,const成員是我們想要保留的東西。 鑒於此,我假設map[key] = value
正在做的事情就像首先擦除現有值,然后插入新值:
map.erase(map.find(key));
map.insert(make_pair(key, value));
然而,實際上似乎發生的是operator []
返回對Value的引用,因此嘗試使用=賦值或移動運算符等。 顯然,這不起作用,因為該成員無法重新分配。 現在,我只是調用erase然后插入自己,但我想知道是否有辦法拉出map[key] = value
使用這種“交換”技術的值。
沒有簡單的方法來實現像C ++那樣的地圖。 想一想:為了做到這一點,你必須讓map []返回一個帶有重載賦值運算符的代理對象,然后在底層映射上調用erase和remove,同時還要小心確保它仍然作為一個引用用作右值時的值。 返回參考是唯一明智的做事方式,也更直觀。
至於如何做你想做的事情,你應該只寫一個函數來做這個,並調用該函數而不是試圖直接將元素分配給地圖。
我想你將地圖定義為:
std::map<Key, Value> mymap;
請注意,地圖的內部節點存儲了您最初傳遞的Key和Value的副本。 如果你想使用交換語義,你應該使用指向Value的指針,例如:
std::map<Key, std::shared_ptr<Value> > mymap;
然后更改值將是這樣的:
mymap[key].reset(new Value(...));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.