Предполагая, что вы используете C ++ 11 или более позднюю версию, возможно, лучший подход:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Для карт emplace
можно рассматривать как версию insert
, которая принимает ключ и значение в качестве отдельных аргументов (фактически она может принимать любую комбинацию аргументов, которую могут принимать конструкторы соответствующего типа pair
). Помимо того, что он синтаксически чище, он также потенциально более эффективен, чем make_pair
, потому что make_pair
обычно создает вывод, тип которого точно не совпадает с value_type
контейнера, и поэтому он вызывает ненужное преобразование типов.
Я рекомендовал это, что также работает только в C ++ 11 или более поздних версиях:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
Это позволяет избежать неожиданного использования emplace
, но раньше оно не работало, если ключ или тип значения были только для перемещения (например, unique_ptr
). Это было исправлено в стандарте, но ваша реализация стандартной библиотеки, возможно, еще не подобрала это исправление. Это также теоретически может быть немного менее эффективным, но таким образом, что любой наполовину достойный компилятор может легко оптимизировать.