перебирая мультимножество структур - PullRequest
1 голос
/ 22 марта 2012

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

#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 и string каждого элемента внутри цикла for?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 марта 2012
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;
}
2 голосов
/ 22 марта 2012

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

Таким образом, в основном вы получаете доступ к элементам с помощью синтаксиса разыменования:

(*it).bar = 0;
it->test = "";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...