Структура вложенной карты Создать пустую карту - PullRequest
0 голосов
/ 06 мая 2018

Я не заставляю это работать. Я хочу инициализировать следующую структуру для последующего использования.

map<pair<string,string>, map<string,vector<fs::path>>> filelist;

Это означает, что я предоставляю пару строк для первой карты. (например, "id1", "id2") с пустой второй картой, которую я могу заполнить позже. Поэтому я хочу сделать что-то вроде этого:

filelist.insert(
     pair<pair<string,string>, pair<string,vector<fs::path>>>
     (make_pair("id1","id2), **empty map??**));

Очевидно, что когда я придерживаюсь вектора вместо вложенной карты, я могу сделать это:

filelist.insert(pair<pair<string, string>, vector<vector<fs::path>>>
     (make_pair("id1","id2"),{}) );

Но как я могу инициализировать пустую карту? Или есть альтернативная структура данных? Спасибо

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы можете инициализировать пустую карту, просто используя ее конструктор по умолчанию. Всегда лучше назвать ваши недавно введенные типы данных. В конце концов, это относительно сложная структура данных. Почему бы вам не упростить вашу проблему?

#include <map>
#include <vector>
#include <filesystem>

using namespace std;
using namespace std::filesystem;

using string_to_vector_of_path_map = map<string, vector<path>>;
using pair_of_strings = pair<string, string>;
using my_map = map<pair_of_strings, string_to_vector_of_path_map>;

my_map filelist;

int main()
{
    filelist.insert(make_pair(make_pair("id1", "id2"), string_to_vector_of_path_map()));
    return 0;
}
0 голосов
/ 06 мая 2018

Я хочу инициализировать следующую структуру для последующего использования. map<pair<string,string>, map<string,vector<fs::path>>> filelist;

Вы можете использовать operator[], чтобы назначить его. Нечто вроде следующего.

filelist[ std::make_pair("string1", "string2") ]   = value();

где using value = std::map< std::string, std::vector<int>>;

Смотрите прямую трансляцию: https://www.ideone.com/lxQir7

существует ли альтернативная структура данных?

Предложение снизить сложность выбранной вами структуры данных возможно, только если вы более подробно объясните свою проблему и требования к манипулированию данными.

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

using key = std::pair< std::string, std::string>;
using value =  std::map< std::string, std::vector<int>>;

int main ()
{
   std::map< key , value > filelist;

   value vMap;
   vMap["string"] = {1,2,3,4};

   filelist[ std::make_pair("string1", "string2") ]   = vMap;

   // to print or access 
   for(auto& key_itr: filelist)
   {
      std::cout<< "KEY: " << key_itr.first.first << " " << key_itr.first.second << "\t VALUE: ";

      for(auto& val_itr: key_itr.second)
      {
         std::cout << val_itr.first << " ";

         for(const auto& vec: val_itr.second)   std::cout << vec << " ";
      }
      std::cout << std::endl;
   }
   return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...