На самом деле есть аргумент для value_type
более make_pair
. Это связано с тем, что по разным непонятным причинам make_pair
принимает свои аргументы по значению. С другой стороны, у value_type
, псевдонима для std::pair<const Key, value>
, будет вызываться его конструктор с аргументами, передаваемыми константной ссылкой. Потенциальная потеря эффективности из-за передачи по значению в make_pair
по сравнению с передачей по ссылке, что теоретически может оказать заметное влияние на вашу программу.
Другая проблема, о которой следует беспокоиться с make_pair
, заключается в том, что make_pair
обычно создает пару типа std::pair<Key, Value>
против std::pair<const Key, Value>
, необходимого внутри map
. Это означает, что может быть сделана еще одна ненужная копия, на этот раз pair
для правильной работы преобразования.
Короче говоря, использование make_pair
может привести к созданию двух совершенно ненужных копий ключа и значения, в то время как использование конструктора value_type
не имеет ни одной.