Возвращают ли итераторы STL константные объекты? - PullRequest
2 голосов
/ 26 апреля 2011

Прошло много времени с тех пор, как мы использовали 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 ]

2 голосов
/ 26 апреля 2011

Они возвращают константный итератор, если контейнер заказан.Идея состоит в том, что если вы измените содержимое, контейнер не узнает и не сможет гарантировать порядок.Vector - нет, а карта - нет.

Если вы уверены, что ваше обновление не влияет на порядок сортировки, вы можете отбросить константу.Как всегда, будьте осторожны, если вы делаете это.

1 голос
/ 26 апреля 2011

устанавливает возвращаемые итераторы только для чтения. Другие контейнеры в stl этого не делают (например, vector).

0 голосов
/ 26 апреля 2011

Вы должны использовать оператор

(*pIt).verified = true;

-> не определен для итераторов STL.

...