c ++:交换地图地图

Sub*_*way 0 c++ swap std

我有以下内容:

typedef std::map<int, std::map<std::string, std::string> > ComplexMap;
ComplexMap map_a;
ComplexMap map_b;
Run Code Online (Sandbox Code Playgroud)

我想将整个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);
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 6

第一个版本具有线性复杂度(O(N)),并且除非它们具有相同的键,否则不会正确地交换映射的元素.

第二个具有恒定的复杂度(O(1))并正确地交换地图的元素.你应该更喜欢第二个.