2014-09-02 68 views
0

我使用std :: map保存一些東西,關鍵是Guid *。替換std :: map中的一個鍵

typedef boost::tuple<c_ptr, handler_ptr> ctuple; 
typedef std::map<GUID *, ctuple> c_map; 

我的問題是: 難道我有辦法改變一個項目在性病的關鍵::地圖嗎? 以外的其他現有的數據複製到具有新的密鑰,並刪除分組/舊項目(用舊鑰匙)的新項目

感謝

+0

另請參見[如何修改std :: map容器中的鍵值](http://stackoverflow.com/q/3884572/96780)。 – 2014-09-02 09:35:37

+1

除了複製? *將數據移動到新項目:-) – 2014-09-02 09:37:15

+0

假設地圖內部是用平衡二叉樹實現的,只是「更改」關鍵數據會破壞樹的目的和順序。 您列出的操作對創建新項目和刪除/重新平衡樹是必需的。 – 2014-09-02 09:43:13

回答

3

我是否有一種方法來改變的關鍵std :: map中的項目?

這就是爲什麼std::map<Key, Value>value_typestd::pair<Key const, Value>(施加到Key通知const)。

+0

所以唯一的辦法是: ctuple tmp = c_map [oldKey]; c_map [NewKey] = tmp; c_map.erase [oldKey]; – Joseph 2014-09-02 10:26:50

+0

@Joseph Yep,類似的東西。在C++ 11中,如果複製的代價相對較高,則可以使用std :: move來移動該值而不是複製該值。 – 2014-09-02 10:39:43

+0

謝謝,我怕std :: move在這裏沒有幫助。從一個地圖移動到另一個地圖是的,但在相同的地圖中的值之間移動數據,我不認爲使用移動會更好。 – Joseph 2014-09-02 11:32:52