如何使用迭代器为对向量分配值?

时间:2018-08-29 04:09:27

标签: c++ vector iterator

我想使用迭代器将值赋值给对向量。

我的代码:

class MyData
{
public:
    void add(const pair<int, string *> &elem)
    {
        auto it =  find_if(myVec.begin(), myVec.end(), [&](pair<int, string *> const & ref)
                   {
                        return ref.second == elem.second;
                   });
        if (it != myVec.end()) //if found
        {
            *it->first = elem.first; //Error : indirection requires pointer operand
            return;
        }
        myVec.push_back(elem);
    }
    vector<pair<int, string *>> myVec;
};

但是我遇到以下错误:

  

* it-> first = elem.first; ->间接需要指针操作数

如何正确地将值赋给向量对中的元素?

1 个答案:

答案 0 :(得分:1)

没有*。请记住,->也会取消引用,并且一旦取消引用迭代器,就会有一个对其进行迭代的对象,在这种情况下,该对象是一对。您当前的代码尝试取消引用该对,这没有意义,因此会出错。您也可以做(*it).first,但这就是->的目的,那么为什么不使用它呢?

#include <vector>
using namespace std;

class MyData
{
public:
    void add(const pair<int, string *> &elem)
    {
        auto it =  find_if(myVec.begin(), myVec.end(), [&](pair<int, string *> const & ref)
                   {
                        return ref.second == elem.second;
                   });
        if (it != myVec.end()) //if found
        {
            it->first = elem.first; //Error : indirection requires pointer operand
            return;
        }
        myVec.push_back(elem);
    }
    vector<pair<int, string *>> myVec;
};

https://godbolt.org/z/iWneFB