2

自从我们使用 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....**
4

3 回答 3

2

如果容器已订购,它们将返回一个 const 迭代器。这个想法是,如果您更改容器不知道的内容并且它不能保证顺序。Vector 没有,但 map 有。

如果您确定您的更新不会影响排序顺序,您可以抛弃 const-ness。如果您这样做,请一如既往地谨慎行事。

于 2011-04-26T17:20:06.847 回答
1

集合返回只读迭代器。stl 中的其他容器没有(例如矢量)。

于 2011-04-26T17:31:51.833 回答
-1

你应该使用

(*pIt).verified = true;

-> 运算符没有为 STL 迭代器定义。

于 2011-04-26T17:20:23.180 回答