如何更新std :: vector <pair <int <int,int =“” >>中最近输入的元素?

时间:2019-02-05 17:03:06

标签: c++ c++11 c++17 stdvector std-pair

如何更新对类型的任何向量类中对的值?

示例:

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

如果我想将3更新为5之类的内容,该如何实现?

4 个答案:

答案 0 :(得分:4)

假设您要在插入std::pair之后立即更新最后 std::vector<std::pair<int, int>>个输入。

中,您可以使用 std::vector::emplace_back 的第二次重载,该重载将为 reference 返回插入的元素:

#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 成员可以实现相同的操作,该成员返回 iterator 指向插入的元素。

#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

答案 1 :(得分:3)

您可以在vector中访问一个值,然后只需设置要更改的值即可。假设您具有对vector的可变访问权限。

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

如果您知道该项目在vector中的索引,则可以使用operator[]at获取对该项目的引用。您还可以将新值复制到相同位置。

V[0] = std::make_pair(3, 5);

答案 2 :(得分:1)

如果istd::vector中包含std::pair的索引,则您希望更新:

vec.at(i).second = 5;

还要注意,std::pair会覆盖=运算符,因此您可以使用以下方法再次分配整个对:

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

答案 3 :(得分:0)

如果要修改向量 V 中的所有对,请使用 for 循环进行迭代:

 for (int i = 0; i < V.size(); i++)
 {  
     V[i].first = // some value;
     V[i].second = // some value;
 }