我使用std :: map保存一些東西,關鍵是Guid *。替換std :: map中的一個鍵
typedef boost::tuple<c_ptr, handler_ptr> ctuple;
typedef std::map<GUID *, ctuple> c_map;
我的問題是: 難道我有辦法改變一個項目在性病的關鍵::地圖嗎? 以外的其他現有的數據複製到具有新的密鑰,並刪除分組/舊項目(用舊鑰匙)的新項目
感謝
我使用std :: map保存一些東西,關鍵是Guid *。替換std :: map中的一個鍵
typedef boost::tuple<c_ptr, handler_ptr> ctuple;
typedef std::map<GUID *, ctuple> c_map;
我的問題是: 難道我有辦法改變一個項目在性病的關鍵::地圖嗎? 以外的其他現有的數據複製到具有新的密鑰,並刪除分組/舊項目(用舊鑰匙)的新項目
感謝
我是否有一種方法來改變的關鍵std :: map中的項目?
號
這就是爲什麼std::map<Key, Value>
value_type
是std::pair<Key const, Value>
(施加到Key
通知const
)。
所以唯一的辦法是: ctuple tmp = c_map [oldKey]; c_map [NewKey] = tmp; c_map.erase [oldKey]; – Joseph 2014-09-02 10:26:50
@Joseph Yep,類似的東西。在C++ 11中,如果複製的代價相對較高,則可以使用std :: move來移動該值而不是複製該值。 – 2014-09-02 10:39:43
謝謝,我怕std :: move在這裏沒有幫助。從一個地圖移動到另一個地圖是的,但在相同的地圖中的值之間移動數據,我不認爲使用移動會更好。 – Joseph 2014-09-02 11:32:52
另請參見[如何修改std :: map容器中的鍵值](http://stackoverflow.com/q/3884572/96780)。 – 2014-09-02 09:35:37
除了複製? *將數據移動到新項目:-) – 2014-09-02 09:37:15
假設地圖內部是用平衡二叉樹實現的,只是「更改」關鍵數據會破壞樹的目的和順序。 您列出的操作對創建新項目和刪除/重新平衡樹是必需的。 – 2014-09-02 09:43:13