Как присвоить значение вектору пары с помощью итератора? - PullRequest
0 голосов
/ 29 августа 2018

Я бы хотел присвоить значение вектору пары, используя итератор.

Мой код:

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 голосов
/ 29 августа 2018

без *. Помните, что -> также выполняет разыменование, и как только вы разыменуете итератор, у вас есть объект типа, который он повторяет, который в этом случае является парой. Ваш текущий код пытается затем разыменовать пару, что не имеет смысла, отсюда и ошибка. Вы также можете сделать (*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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...