Đầu tiên và trước hết, mương chuỗi và sử dụng 2 int, mà bạn có thể đã thực hiện ngay bây giờ. Kudos cho việc tìm ra rằng một cây là cách tốt nhất để thực hiện một ma trận thưa thớt. Thông thường một nam châm để thực hiện xấu có vẻ như.
FYI, khóa hợp chất ba cũng hoạt động và tôi cũng giả sử một cặp.
Nó làm cho một số kịch bản phụ xấu xí mặc dù, do đó, một chút ma thuật vĩ mô sẽ làm cho cuộc sống của bạn dễ dàng hơn. Tôi đã để lại một mục đích chung này, nhưng việc nhập các đối số trong macro là một ý tưởng hay nếu bạn tạo các macro cho các bản đồ cụ thể. TresKey12
được kiểm tra và chạy tốt. QuadKeys
cũng sẽ hoạt động.
LƯU Ý: Miễn là các bộ phận quan trọng của bạn là các loại dữ liệu cơ bản, bạn KHÔNG cần phải viết gì thêm. AKA, không cần phải băn khoăn về các chức năng so sánh. STL có bạn bảo hiểm. Chỉ cần mã nó lên và để cho nó rip.
using namespace std; // save some typing
#define DosKeys(x,y) std::make_pair(std::make_pair(x,y))
#define TresKeys12(x,y,z) std::make_pair(x,std::make_pair(y,z))
#define TresKeys21(x,y,z) std::make_pair(std::make_pair(x,y),z))
#define QuadKeys(w,x,y,z) std::make_pair(std::make_pair(w,x),std::make_pair(y,z))
map<pair<INT, pair<ULLNG, ULLNG>>, pIC_MESSAGE> MapMe;
MapMe[TresKey12(Part1, Part2, Part3)] = new fooObject;
Nếu ai đó muốn gây ấn tượng với tôi, chỉ cho tôi làm thế nào để làm cho một nhà điều hành so sánh cho TresKeys
mà không dựa vào cặp làm tổ để tôi có thể sử dụng một đơn struct
với 3 thành viên và sử dụng một chức năng so sánh.
PS: TresKey12 đã cho tôi sự cố với bản đồ được khai báo là cặp, vì nó làm cho x, ghép nối và hai thứ đó không phát đẹp. Không phải là một vấn đề đối với DosKeys, hoặc QuadKeys. Nếu đó là một mùa hè nóng thứ sáu mặc dù, bạn có thể tìm thấy một tác dụng phụ bất ngờ của việc gõ vào DosEquis ... err .. DosKeys một loạt các lần, là một khát cho bia Mexico. Emptor caveat. Như Sheldon Cooper nói, "Cuộc sống không có gì hay thay đổi?"
Bạn có thể dễ dàng và hợp pháp nhét hai chờ đợi vào một _int64, hoặc như trong câu trả lời của tôi dưới đây, một số sê-ri, PID, và nodeID. Vì MAX_PID là (1 << 22) trên Linux, điều này thực sự để lại 64 - (32 + 22) còn lại cho NodeId, là 10 bit, giữ bất kỳ giá trị nào lên tới (1 << 10) IE: 1024 – RocketRoy
Giả sử bạn làm không muốn lặp lại bản đồ theo một số thứ tự cụ thể, sử dụng một bản đồ băm như std :: unordered_map. Hiệu quả hơn nhiều đặc biệt là khi bạn có nhiều giá trị. – hyde