有没有快速的方法来替换两个地图内容?

时间:2011-09-22 07:30:48

标签: c++ swap

在我的代码中,我有一张地图,其中包含大量数据(~100MB)我需要将所有数据从一个地图复制到另一个地图。目前我正在使用swap but to my understanding这样做,swap是一种复制的奇特方式。有没有办法简单地转移两张地图使用的内存?我认为我可以用指针做到这一点,但我希望有一种更优雅的方式。

2 个答案:

答案 0 :(得分:5)

23.2.1 ISO / IEC 14882:2011的[container.requirements.general]包含一般容器要求的列表。对于所有标准容器,表达式a.swap(b)swap(a, b)必须交换ab的内容,并且除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