STL迭代器是否返回const对象?

时间:2011-04-26 17:13:47

标签: stl const multiset

我们使用STL已经很长时间了,所以任何帮助都会受到赞赏。不确定我们在这里做错了什么...... 鉴于此,为什么此代码会抛出错误:
“您无法分配给const的变量”

struct person
{
int age;
bool verified;
string name

bool operator< (person const &p)
{
return (age < p.age);
}

};

multiset<person> msPerson;
multiset<person>::iterator pIt;

// add some persons
while (adding people)
{
    Person p;
    p.name=getNextName();
    p.age=getNextAge();
    msPerson.insert(p);
}


pIt = msPerson.begin();
// try to verify
pIt->verified = true; <---- **error here....**

3 个答案:

答案 0 :(得分:2)

如果订购了容器,它们将返回一个const迭代器。这个想法是,如果你更改容器不知道的内容,它不能保证订单。矢量没有,但地图确实如此。

如果您确定更新不会影响排序顺序,则可以丢弃常量。如果你这样做,一如既往地谨慎行事。

答案 1 :(得分:1)

设置返回只读迭代器。 stl中的其他容器没有(例如vector)。

答案 2 :(得分:-1)

你应该使用

(*pIt).verified = true;

- &GT;没有为STL迭代器定义operator。