2012-03-22 3 views
1

Я не получаю синтаксис правильно. Допустим, у меня есть это ...Итерирование через мультимножество структур

#include <set> 
...  
struct foo{ 
    int bar; 
    string test; 
}; 

struct comp{ 
    inline bool operator()(const foo& left,const foo& right){ 
     return left.bar < right.bar; 
    } 
}; 

int main(){ 
    std::multiset<foo,comp> fooset; 
    std::multiset<foo,comp>::iterator it; 

    ...//insert into fooset 

    for (it = fooset.begin(); it != fooset.end(); it++){ 
     //how do i access int bar and string test of each element? 
    } 
    return 0; 
} 

Как получить доступ к int bar и строковой проверке каждого элемента внутри цикла for?

Спасибо!

ответ

2

Существует хорошее мнемоническое правило, что итератор является безопасной абстракцией C++ для указателя.

Так в основном вы получаете доступ к элементам через разыменование синтаксиса:

(*it).bar = 0; 
it->test = ""; 
2
for (it = fooset.begin(); it != fooset.end(); it++) 
{ 
     foo const & f = *it; //const is needed if it is C++11 
     //use f, e.g 
     std:: cout << f.bar <<", " << f.test << std::endl; 
} 

В C++ 11, вы могли бы сделать это вместо:

for(foo const & f : fooset) 
{ 
     //use f, e.g 
     std:: cout << f.bar <<", " << f.test << std::endl; 
} 
+1

+1 за упоминание варьировались синтаксис от C++ 11. – ulidtko

+0

'const' необходим в любом случае. –

+0

@ n.m .: C++ 03 не требует, чтобы вы это делали, я думаю. – Nawaz