C ++ несколько карт внутри карты - PullRequest
1 голос
/ 27 марта 2020

В python У меня может быть словарь внутри словаря, например:

dict = {  'a': { 1:1, 2:2, 3:3 }, 
          'b': { 1:1, 2:2, 3:3 }, 
          'c': { 1:1, 2:2, 3:3 }   }

В C ++ я должен использовать карту внутри другой карты:

std::map< std::string, std::map<int, int> > map1

Но как получить ту же структуру, что и в примере python? Не удалось найти ни одного примера.

std::map< std::string, std::map<int, int, int> > ??

std::map<std::string, std::map<int, int>, std::map<int, int>, std::map<int, int> > ??

Ответы [ 2 ]

5 голосов
/ 27 марта 2020

Если вы имеете в виду инициализацию объекта карты, то он может выглядеть как

#include <iostream>
#include <string>
#include <map>

int main() 
{
    std::map< std::string, std::map<int, int> > m =
    {
        { "a", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
        { "b", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
        { "c", { { 1, 1 }, { 2, 2 }, { 3, 3 } } },
    };

    for ( const auto &p1 : m )
    {
        std::cout << p1.first << ": ";
        for ( const auto &p2 : p1.second )
        {
            std::cout << "{ " << p2.first << ", " << p2.second << " } ";
        }
        std::cout << '\n';
    }

    return 0;
}

Выходные данные программы:

a: { 1, 1 } { 2, 2 } { 3, 3 } 
b: { 1, 1 } { 2, 2 } { 3, 3 } 
c: { 1, 1 } { 2, 2 } { 3, 3 } 
1 голос
/ 27 марта 2020

Синтаксис для размещения пар ключей в картах отличается в C ++ от Python. В C ++ контейнер std::map предоставляет метод emplace(key, value) для выполнения чего-то вроде dict[key] = value. Это также немного отличается, потому что C ++ строго типизирован, вы должны предоставить правильный тип для ключа и значение (как определено в шаблоне)

Чтобы сделать эквивалент вашего python кода с std::map Вы бы сделали это:

std::map<std::string, std::map<int, int> dict
std::map<int, int> my_map;
my_map.emplace(1, 0); // Add a key of 1 with a value of 0 to the map
dict.emplace("My key", my_map); // Add the map to the other map with a key of "My map"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...