Как обновить недавно введенный элемент в std :: vector>? - PullRequest
0 голосов
/ 05 февраля 2019

Как можно обновить значение для пар в любом векторном классе типа пары?

Пример:

V.push_back(make_pair(1, 3));

Если я хочу обновить 3, чтобы сказать 5 иличто-то, как мне этого достичь?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Вы получаете доступ к значению в вашем vector и просто устанавливаете значения, которые хотите изменить.Предполагая, что у вас есть изменяемый доступ к вашему vector.

V.back().first = 1;
V.back().second = 2;

Если вы знаете индекс элемента в пределах vector, вы можете использовать operator[] или at, чтобы получить ссылку навещь.Вы также можете скопировать новое значение в ту же позицию.

V[0] = std::make_pair(3, 5);
0 голосов
/ 05 февраля 2019

Предполагая, что вы хотите обновить last std::pair сразу после вставки в std::vector<std::pair<int, int>>.

In вы можете использовать вторую перегрузку std::vector::emplace_back, которая возвращает ссылку на вставленный элемент:

#include <vector>

std::vector<std::pair<int, int>> vec;
auto &pair = vec.emplace_back(1, 3); // construct in-place and get the reference to the inserted element
pair.second = 5;                     // change the value directly like this

Обновление:

В , то же самое может быть достигнуто с помощью std::vector::insert элемент, который возвращает итератор , указывающий на вставленный элемент.

#include <vector>

std::vector<std::pair<int, int>> vec;
// insert the element to vec and get the iterator pointing to the element
const auto iter = vec.insert(vec.cend(), { 1, 3 });
iter->second = 5; // change the value
0 голосов
/ 05 февраля 2019

Если i является индексом в std::vector, содержащем std::pair, который вы хотите обновить:

vec.at(i).second = 5;

Также обратите внимание, что std::pair переопределяет оператор =, поэтому вы можете назначитьвся пара снова с:

vec.at(i) = std::make_pair(val1, val2);
...