你能告訴我如何編寫多維地圖嗎?對於二維地圖,我做了以下內容:在C++中的4d映射?
map<string, int> Employees
Employees[「person1」] = 200;
我試圖用類似下面的四維測繪的東西。
map<string, string, string, int> Employees;
Employees[「person1」]["gender"][「age」] = 200;
你能告訴我正確的方法嗎?
你能告訴我如何編寫多維地圖嗎?對於二維地圖,我做了以下內容:在C++中的4d映射?
map<string, int> Employees
Employees[「person1」] = 200;
我試圖用類似下面的四維測繪的東西。
map<string, string, string, int> Employees;
Employees[「person1」]["gender"][「age」] = 200;
你能告訴我正確的方法嗎?
map<string, map<string, map<string, int> > > employees;
employees["person1"]["gender"]["age"] = 200;
非常感謝您通過示例展示 – 2012-02-15 06:43:54
不客氣。 – 2012-02-15 06:55:22
您可以使用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;
嵌套的地圖?
map<string, map<string, map<string, int>>> Employees;
或者做出這樣
findEmployee(string, string, string, int)
它的功能可能會比挖出第三級別的地圖更容易調用。
您通常希望將密鑰的所有三個部分合併到一個類中,並使用一個比較運算符。你既可以使用像一個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;
}
};
我喜歡這種方法:
std::map<std::tuple<std::string, std::string, std::string>, int> Employees;
Employees[std::make_tuple("person1", "gender", "age")] = 200;
謝謝大家對我展示不同的方式用例子。 – 2012-02-15 06:44:59