Этот синтаксис:Почему std :: map берет пару?
std::map<int, int> m;
m.insert(std::make_pair(1, 42));
кажется немного сумасшедшим.
Почему не существует никакой альтернативы insert(K k, V v)
метода, который обеспечит гораздо разумнее:
std::map<int, int> m;
m.insert(1, 42);
Да, я в курсе m[1] = 42
, но у него есть свои собственные проблемы (создание дополнительной копии объекта значения) ,
'm.emplace (1, 42)'? –
Согласованность и история, я думаю. Я думаю, что «карта» уже работала так, как в исходном STL, прежде чем она была включена в стандартную библиотеку, а так как тип значения контейнера * - это пара, использование пары в качестве типа параметра является просто самым логичным способом. AFAIK, 'operator []' был запоздалой мыслью, спроектированной как (непоследовательная) функция удобства, чтобы обеспечить «более здравую» альтернативу, которую вы просите. –