在我的代码中,我有一张地图,其中包含大量数据(~100MB)我需要将所有数据从一个地图复制到另一个地图。目前我正在使用swap but to my understanding这样做,swap是一种复制的奇特方式。有没有办法简单地转移两张地图使用的内存?我认为我可以用指针做到这一点,但我希望有一种更优雅的方式。
答案 0 :(得分:5)
23.2.1 ISO / IEC 14882:2011的[container.requirements.general]包含一般容器要求的列表。对于所有标准容器,表达式a.swap(b)
和swap(a, b)
必须交换a
和b
的内容,并且除array
以外的所有标准容器都必须具有恒定时间。这实际上意味着交换地图不会涉及复制所有地图元素。
答案 1 :(得分:4)
除非在作为瓶颈的分析器中出现这种情况,否则您可能会过早地进行优化。
我的编译器std::map::swap()
有以下注释,表示地图交换可能非常快:
/**
* This exchanges the elements between two maps in constant
* time. (It is only swapping a pointer, an integer, and an
* instance of the @c Compare type (which itself is often
* stateless and empty), so it should be quite fast.) Note
* that the global std::swap() function is specialized such
* that std::swap(m1,m2) will feed to this function.
*/
(g++ 4.4.5
)