2013-11-27 2 views
-1

У меня есть этот код:пара внутри карты - как Foreach

typedef std::map<const char *, std::pair<const char *, const char *> > MyMap; 
MyMap the_map; 

the_map.insert(std::make_pair("Text1", std::make_pair("Text2", "Text3"))); 

Очевидно целью является, чтобы хранить информацию таким образом:

"Text1" -> "Text2" -> "Text3"

Вопрос: Как я Foreach каждый элемент из первой (например, «Text1») и изменить значение каждого внутреннего ключа (например, «Text3»).

спасибо.

+5

Это не сопоставления внутри карты. –

+0

@NedStark исправлена, спасибо. –

ответ

0

Вы можете использовать итератор карты, чтобы пойти бросить все элементы:

for (std::map<const char *, std::pair<const char *, const char *> >::iterator ii = the_map.begin(), e = the_map.end(); ii != e; ii++) { 
    // ii.first - key value 
    // ii.second - stored value (in your case a pair) 
    // 
    // ii.second.first - key value of pair stored in map under ii.first 
    // ii.second.second - stored value of pair stored in map under ii.first 
} 
1

A std::pair не имеет begin() или end() функции.

Вам нужно всего лишь один цикл:

for (const auto& it : the_map) { 
     std::cout << it.first << " " << it.second.first 
        << " " << it.second.second << std::endl; 
} 
+0

Я использую слишком старый GCC и получаю это сообщение об ошибке: ошибка: ISO C++ запрещает объявление 'it' без типа [-fpermissive] –

+0

@Amanda vz_ предоставляет ответ, используя итераторы без ключевого слова auto. –

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