Possible swap map elements without copy?

时间:2016-02-25 20:47:19

标签: c++

I have a map<int,map<int,string>> themap

I would like to swap elements themap[1] and themap[2]. But the inside maps map<int,string> are very big so I don't want them copied. Is there way to do this or do I have to change themap to use pointers.

3 个答案:

答案 0 :(得分:4)

您可以尝试使用std::map::swap作为外部地图:

  

void swap( map& other );

     

将容器的内容与其他容器的内容进行交换。不会对单个元素调用任何移动,复制或交换操作。

答案 1 :(得分:3)

themap[1].swap(themap[2]);

这不会复制甚至移动地图中的任何元素。它可能只是交换根节点的所有权,只需几个指针分配。

答案 2 :(得分:0)

您可以使用std::swap,因为它具有std::map(以及许多其他容器和库类型)的专业化。

std::swap(themap[1], themap[2]);

它会调用std::map::swap,但我认为养成使用std::swap并信任标准委员会和图书馆实施者做正确事情的习惯是有用的。