2014-02-07 3 views
1

Я использую многоуровневую картуC++ 3 уровня на карте

map<string, map<string, map<string, int>>> _myMap; 

Как получить доступ к значению целого числа, используя итератор только внешней карты?

Пожалуйста, помогите мне найти подходящие ссылки для 3-уровневой карты.

+2

Вы не можете t здесь не такое, как одно целое во второй и третьей карте. Вам нужно указать ключ для второй и третьей карт, чтобы получить целое число. – Samuel

+3

Кроме того, контейнеры контейнеров контейнеров имеют настоящий запах кода. Вы должны смотреть на моделирование по-другому. – Sean

ответ

1

Для извлечения «первого» внутреннего int (предположим, что существует) вы можете использовать следующее.

int i = it->second.begin()->second.begin()->second; 

Чтобы перебрать все значения, вы можете использовать:

  • C++ 11:

    for (/*const*/ auto& p1 : _myMap) { 
        const std::string& s1 = p1.first; 
        for (/*const*/ auto& p2 : p1.second) { 
         const std::string& s2 = p2.first; 
         for (/*const*/ auto& p3 : p2.second) { 
          const std::string& s3 = p3.first; 
          /*const*/ int& value = p3.second; 
    
          // Do what you want. 
         } 
        } 
    } 
    
  • C++ 03:

    typedef map<string, int> map3; 
    typedef map<string, map3> map2; 
    typedef map<string, map2> map1; 
    
    for (map1::/*const_*/iterator it1 = _myMap.begin(), end1 = _myMap.end(); it1 != end1; ++it1) { 
        const std::string& s1 = it1->first; 
        for (map2::/*const_*/iterator it2 = it1->second.begin(), end2 = it1->second.end(); it2 != end2; ++it2) { 
         const std::string& s2 = it2->first; 
         for (map3::/*const_*/iterator it3 = it2->second.begin(), end3 = it2->second.end(); it3 != end3; ++it3) { 
          const std::string& s3 = it3->first; 
          /*const*/ int& value = it3->second; 
    
          // Do what you want. 
         } 
        } 
    } 
    
+0

Как получить доступ к дополнительным целым значениям? –

+0

@VarunKikaan: ответ отредактирован. – Jarod42

1
int myInt = (((*it).second)["index"])["index"]; 

Вы также можете восстановить новую карту с помощью итератора и повторить ее.

+2

Я считаю, что вы имели в виду 'it-> second [" index "] [" index "]' – Angew

+0

Hum Я сейчас запутался, ваш выглядит лучше, но не так ли? –

+0

@Mayerz 'second' не является функцией. – RedX

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