簡體   English   中英

交換與使用std :: map []運算符分配(const問題)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM