Предполагая, что вы используете 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
). Это было исправлено в стандарте, но ваша стандартная реализация библиотеки, возможно, еще не взяла исправление. Это также теоретически может быть немного менее эффективным, но таким образом, чтобы любой наполовину достойный компилятор мог легко оптимизировать ситуацию.
Какой код вы старались? – Mark