如何更改集合cpp中元素的属性

时间:2014-11-29 05:49:26

标签: c++ set

我定义了一个集合及其运算符:

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中元素的属性?

2 个答案:

答案 0 :(得分:1)

您的错误与const的{​​{1}}要求无关。

std::set运算符的优先级低于*运算符。而不是->您需要*it->setStepCount

答案 1 :(得分:1)

由于运营商优先权,

*it->getStepCount()

相同
*(it->getStepCount())

您正在寻找的是:

(*it)->getStepCount()

同样,您需要使用:

(*it)->setStepCount(_state->getStepCount());