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