0

我有以下内容:

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);
4

2 回答 2

6

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

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

于 2013-10-08T09:44:36.017 回答
0

第二个选项应该比第一个更有效,因为 map.swap 将立即交换整个内容,而不是遍历整个内容并移动它。此外,第一个选项真的很难理解。

希望这会有所帮助,拉兹万。

于 2013-10-08T09:45:22.283 回答