Câu hỏi cần được bắt đầu bằng cách xem xét các trường hợp sử dụng bạn cần hỗ trợ. Nếu dữ liệu của bạn có thứ bậc và bạn cần truy cập toàn bộ các phần con của nó (như đi qua số my_map["criteria1"]
, bạn nên gắn với phiên bản đầu tiên.
Nếu trường hợp đó không xảy ra và bạn chỉ có một bộ dữ liệu lớn Ghép nối các chuỗi không phải là cách tiếp cận tốt nhất vì nó tạo ra một số chi phí nhất định để sao chép và ghép các chuỗi và bạn cần phải cẩn thận về dấu phân tách, có thể yêu cầu bạn thoát khỏi các ký tự nhất định. phức tạp hơn, có nghĩa là: Nhiều lỗi hơn, thay vào đó, bạn muốn lưu trữ ba tiêu chí trong một loại khóa phù hợp, duy nhất: std::tuple
.
Bản đồ của bạn có thể giống như (được lưu trữ giá trị của một số loại X
):
using my_key_type = std::tuple<std::string,std::string,std::string>;
std::map< my_key_type, X > my_map;
giá trị Thêm làm việc như thế này:
my_map.emplace(my_key_type("A", "B", "C"), x); // x is a value of type X
Và tra cứu có thể được thực hiện một cách hiệu quả với:
X x = my_map[ std::tie("A", "B", "C") ];
Như đã chỉ ra bởi David Rodríguez, std::tie
không mua hiệu quả cao khi được sử dụng với []
, nhưng nó ngắn hơn std::make_shared
. Dù sao, bạn sẽ có một lợi ích trong tương lai với C++ 14 khi bạn sử dụng my_map.find(std::tie("A", "B", "C"));
mà sẽ cho phép trình biên dịch bỏ qua việc sao chép các chuỗi để tra cứu.
Nguồn
2013-10-21 20:24:13
Tại sao bạn không thử nghiệm? –
Có người đầu tiên sẽ chậm hơn – P0W
Có đáng không? Cái nào dễ sử dụng nhất? – Aleph