У меня есть std::vector<std::pair<...>>
и я хочу эффективно изменить их:
vector<pair<int, int>> vec;
vec.emplace_back(4, 5);
vec.emplace_back(6, 7);
// Now I want to set the first pair in the vector.
vec[0] = make_pair(10, 10);
Насколько я понимаю, у нас есть
- Временная пара построена из
make_pair
.Для этого требуется 2 копии int
с. - Далее вызывается
pair<int,int>& operator=( pair<int,int>&& other )
, что вызывает std::move
на двух int
с в pair
.Это займет 2 копии int
с.
В результате мы получим 4 копии целых чисел!
Но модификация pair
в Vector
должна занять 2 копииint
с.emplace_back
мне кажется, что мне нужно, но он создает конструкцию на месте только в конце вектора, а не по любому другому индексу.
Конечно, я могу сделать
vec[0].first = 10;
vec[0].second = 10;
Но это принимает во внимание внутренности пары, которые я хочу опустить.
Как я могу написать код более эффективно (без избыточных копий int
с)?