2011-04-26 68 views
2

我們使用STL已經很長時間了,所以我們將不勝感激。不知道我們做錯了什麼...... 鑑於此,爲什麼會發生這種代碼拋出一個錯誤:
「你不能分配給一個變量,常量」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....** 

回答

2

它們返回一個const迭代器,如果容器是訂購的。這個想法是,如果你改變容器不知道的內容,它不能保證順序。矢量不,但地圖。

如果您確定更新不影響排序順序,您可以丟棄常量。一如既往謹慎行事,如果你這樣做。

+0

這很有道理。這是示例代碼,但實際上我們沒有改變會影響訂單的任何事情。請問什麼是最好的形式來「拋棄」? – Gio 2011-04-26 17:24:46

-1

您應該使用

(*pIt).verified = true; 

- >運營商沒有爲STL迭代器定義。

1

設置返回只讀迭代器。 stl中的其他容器不會(例如矢量)。