我有以下内容:
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);
答案 0 :(得分:6)
第一个版本具有线性复杂度( O(N))并且没有正确地交换地图的元素,除非它们具有相同的键。
第二个具有不变的复杂性( O(1))并正确地交换地图的元素。你应该更喜欢第二种。
答案 1 :(得分:0)
第二个选项应该比第一个选项更有效,因为map.swap将立即交换整个内容,而不是通过整个内容迭代并移动它。另外,第一个选项真的让人难以理解。
希望这有帮助, 勒兹。