2012-02-15 22 views
5

你能告訴我如何編寫多維地圖嗎?對於二維地圖,我做了以下內容:在C++中的4d映射?

map<string, int> Employees 
Employees[「person1」] = 200; 

我試圖用類似下面的四維測繪的東西。

map<string, string, string, int> Employees; 
Employees[「person1」]["gender"][「age」] = 200; 

你能告訴我正確的方法嗎?

+0

謝謝大家對我展示不同的方式用例子。 – 2012-02-15 06:44:59

回答

4
map<string, map<string, map<string, int> > > employees; 
employees["person1"]["gender"]["age"] = 200; 
+0

非常感謝您通過示例展示 – 2012-02-15 06:43:54

+0

不客氣。 – 2012-02-15 06:55:22

2

您可以使用std::pair作爲您的密鑰。

例如,

typedef std::pair<std::string, std::string> key_part; 
typedef std::pair<key_part, std::string> key; 
std::map<key, int> Employees; 

哪位能像然後可以使用:

key_part partialKey = std::pair<std::string, std::string>("person1","gender"); 
key myKey = std::pair<key_part, std::string>(partialKey, "age"); 
Employees[myKey] = 200; 
1

嵌套的地圖?
map<string, map<string, map<string, int>>> Employees;

或者做出這樣
findEmployee(string, string, string, int)
它的功能可能會比挖出第三級別的地圖更容易調用。

6

您通常希望將密鑰的所有三個部分合併到一個類中,並使用一個比較運算符。你既可以使用像一個pair<pair<string, string>, string>,或者一個boost ::元組,或自己定義:

class key_type { 
    std::string field1, field2, field3; 
public: 
    bool operator<(key_type const &other) { 
     if (field1 < other.field1) 
      return true; 
     if (field1 > other.field1) 
      return false; 
     if (field2 < other.field2) 
      return true; 
     if (field2 > other.field2) 
      return false; 
     return field3 < other.field3; 
    } 
}; 
1

我喜歡這種方法:

std::map<std::tuple<std::string, std::string, std::string>, int> Employees; 
Employees[std::make_tuple("person1", "gender", "age")] = 200;