我定义了一个集合及其运算符:
class CompareStateId {
public:
bool operator()(State *_state1, State *_state2)
{
if (_state2->getId() == _state1->getId()) return true;
return false;
}
};
set<State*, CompareStateId> consideredState;
然后我想改变这个集合中的状态值:
set<State*, CompareStateId>::iterator it = consideredState.find(_state);
if( it != consideredState.end()){
if(_state->getStepCount() < *it->getStepCount()){ // [Error] request for member 'getStepCount' in '* it.std::_Rb_tree_const_iterator<_Tp>::operator-><State*>()', which is of pointer type 'State* const' (maybe you meant to use '->' ?)
*it->setStepCount(_state->getStepCount());
}
}
由于某些原因,我不想删除并重新插入。 如何更改集合cpp中元素的属性?
答案 0 :(得分:1)
您的错误与const
的{{1}}要求无关。
std::set
运算符的优先级低于*
运算符。而不是->
您需要*it->setStepCount
。
答案 1 :(得分:1)
由于运营商优先权,
*it->getStepCount()
与
相同*(it->getStepCount())
您正在寻找的是:
(*it)->getStepCount()
同样,您需要使用:
(*it)->setStepCount(_state->getStepCount());