2014-09-06 91 views
0

我想实现一个2D unordered_map,看起来像:创建2D unordered_map C++

std::unordered_map<std::string, std::unordered_map<std::string, double>>

因此,首先,我做执行内部unordered_graph:

std::unordered_map<std::string, std::unordered_map<std::string, double> *inner = new 
      std::unordered_map<std::string, std::unordered_map<std::string, double>>() 
inner->insert(std::make_pair("X", 0)); 

然后,我试图通过做外部unordered_map

std::unordered_map<std::string, std::unordered_map<std::string, double> *outer = 
    std::unordered_map<std::string, std::unordered_map<std::string, double>>() 
outer->insert("X", inner); 

但它给我一个错误说no matching function for call to insert

+0

你叫'inner'的那个实际上和外部映射一样。 * *它不是可编译的,因为你错过了一些关闭'>'。 – 2014-09-06 08:34:16

回答

1

您使用insert错在这里:

outer->insert("X", inner); 

它需要一个VALUE_TYPE即的std ::对。你传递两个参数而不是一个,所以你需要对这些参数做make_pair(),再加上你需要传递一个值,所以*inner而不是inner这是一个指针。

一旦这一切都说完了,你可能会更好用不同的数据结构,因为散列表的散列表通常不是最有效的。

+0

+1,特别是针对不同结构的建议。散列表的散列表通常毫无意义,因为通常只需使用一个散列表和一个'std :: pair '作为关键类型(当然这是可散列的)。除非您需要为内部地图对象折腾,分配等* *实例*或*引用,否则它可能是一个有价值的选择。 – WhozCraig 2014-09-06 08:54:22