2014-09-02 312 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