c ++:交换地图地图

时间:2013-10-08 09:42:05

标签: c++ std swap

我有以下内容:

typedef std::map<int, std::map<std::string, std::string> > ComplexMap;
ComplexMap map_a;
ComplexMap map_b;

我想将整个map_a交换为map_b。以下两个选项之间是否存在功能差异:

// 1

ComplexMap::iterator end = map_a.end;
for (ComplexMap::iterator it = map_a.begin(); it != end; ++it)
{
    mam_b[it->first].swap(it->second);
}

// 2

map_b.swap(map_a);

2 个答案:

答案 0 :(得分:6)

第一个版本具有线性复杂度( O(N))并且没有正确地交换地图的元素,除非它们具有相同的键。

第二个具有不变的复杂性( O(1))并正确地交换地图的元素。你应该更喜欢第二种。

答案 1 :(得分:0)

第二个选项应该比第一个选项更有效,因为map.swap将立即交换整个内容,而不是通过整个内容迭代并移动它。另外,第一个选项真的让人难以理解。

希望这有帮助, 勒兹。