2013-04-06 4 views
0

Как я могу получить доступ к map, который хранится в std::set? Мне нужно сделать что-то вродеИтератор в std :: set содержащий std :: map

for (iterator=map.begin(); iterator!=map.end(); iterator++) { 
    some_function(iterator->first); 
} 

, но вместо карты im использовать набор, содержащий карты.

+1

Что вы знаете о карте, которую вы хотите найти? –

+0

Помните, что 'std :: set :: iterator' является' std :: set :: const_iterator' в C++ 11. – chris

+0

Точно так же, только сначала вы должны найти свою карту в своем наборе. – john

ответ

1

Это не очень отличается от итерации любой другой карты.

set<map<int, int> > s; 
for (set<map<int, int> >::iterator it = s.begin(); it != s.end(); ++it) { 
    for (map<int, int>::iterator iter = it->begin(); iter != it->end(); ++iter) { 
    .. do something ... 
    } 
} 

Итак, сначала вы итерацию по множеству, а затем над элементами карты, на который указывает итератор внешней контейнера. Я использовал map<int, int> здесь только для иллюстрации.

+0

@stardust_ [обе версии] (http://www.cplusplus.com/reference/set/set/begin/). Даже пример на этой странице показывает использование с не-константным итератором –

+0

Не должно быть 'map :: const_iterator iter = it-> begin()'? begin() возвращает const_iterator для set. – 2013-04-06 19:50:56

+0

Спасибо, я действительно устал, чтобы не осознавать этого. – user2221390

1

Использование диапазона для делает это гораздо проще (при условии, я понимаю Ваш вопрос):

for (map<int, int>& m : my_set) { 
    some_function(m); 
} 
+0

+1: Невозможно использовать 'auto' для дальнейшей компактности? – Arun

Смежные вопросы