с ++: обмен картами

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);
Теги:
std
swap

2 ответа

6
Лучший ответ

Первая версия имеет линейную сложность (O (N)) и не корректно меняет элементы карт, если они не имеют одинаковых ключей.

Вторая имеет постоянную сложность (O (1)) и правильно меняет элементы карт. Вы должны предпочесть второй.

0

Второй вариант должен быть более эффективным, чем первый, так как map.swap будет заменять весь контент одновременно, а не повторять весь контент и перемещать его. Также первые варианты действительно запутывают, чтобы понять.

Надеюсь, это поможет, Разван.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню