Есть два способа вставки карты:
m[key] = val;
Or
m.insert(make_pair(key, val));
У меня вопрос, какая операция быстрее? Люди обычно говорят, что первый медленнее, потому что стандарт STL сначала «вставляет» элемент по умолчанию, если «ключ» не существует на карте, а затем назначает «val» элементу по умолчанию.
Но я не считаю, что второй способ лучше из-за make_pair. make_pair на самом деле - удобный способ создать «пару» по сравнению с pair<T1, T2>(key, val)
. В любом случае, оба они выполняют два присваивания: одно назначает «ключ» для «pair.first», а два - «val» для «pair.second». После создания пары карта вставляет элемент, инициализированный параметром pair.second.
Итак, первый способ - 1. «default construct of typeof(val)
» 2. присвоение, второй способ - 1. присвоение 2. «copy construct of typeof(val)
»
std::map<>::operator[]
не инициализирует значения по умолчанию, он инициализирует значения значений, поэтому что-то вродеstd::map<K, std::array<int, 1000>>::operator[]
может быть чрезвычайно расточительным. 03.05.2012