我不能让这个工作。我想初始化以下结构供以后使用。
map<pair<string,string>, map<string,vector<fs::path>>> filelist;
这意味着我为第一张地图提供了字符串对。 (例如,&#34; id1&#34;,&#34; id2&#34;)带有空的第二张地图,我可以稍后填写。所以我想做这样的事情:
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"),{}) );
但是如何初始化空地图?或者是否有替代数据结构?感谢
答案 0 :(得分:1)
我想初始化以下结构供以后使用。
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;
}
答案 1 :(得分:1)
您可以使用默认构造函数初始化空地图。 为新引入的数据类型命名始终是一个更好的主意。 毕竟,它是一个相对复杂的数据结构。为什么不简化你的问题呢?
#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;
}