2014-09-06 114 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