2012-02-15 35 views
5

Bạn có thể vui lòng cho tôi biết cách tôi có thể viết bản đồ đa chiều. Đối với bản đồ hai chiều, tôi đã làm như sau:Lập bản đồ 4d trong C++?

map<string, int> Employees 
Employees[“person1”] = 200; 

Tôi đã cố gắng sử dụng một cái gì đó tương tự như sau để lập bản đồ 4d.

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

Bạn có thể cho tôi biết cách chính xác để làm điều này không?

+0

Cảm ơn tất cả các bạn đã cho con thấy những cách khác nhau với các ví dụ. –

Trả lời

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

Cảm ơn rất nhiều vì đã hiển thị nó với một ví dụ –

+0

Bạn được chào đón. –

2

Bạn có thể sử dụng std::pair làm khóa của mình để thay thế.

Ví dụ,

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

nào sau đó có thể được sử dụng như:

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

bản đồ lồng nhau?
map<string, map<string, map<string, int>>> Employees;

Hoặc thực hiện chức năng như
findEmployee(string, string, string, int)
cho nó có thể được dễ dàng hơn để gọi hơn đào ra bản đồ mức độ thứ ba.

6

Bạn thường muốn kết hợp cả ba phần của khóa vào một lớp duy nhất, với một toán tử so sánh đơn. Bạn có thể có thể sử dụng một cái gì đó giống như một pair<pair<string, string>, string>, hoặc một tăng :: tuple, hoặc xác định điều đó cho mình:

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

Tôi thích cách tiếp cận này:

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