Giả sử bạn đang sử dụng C++ 11 hoặc mới hơn, phương pháp tốt nhất có lẽ là:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Đối với bản đồ, emplace
có thể được coi như một phiên bản của insert
mà sẽ đưa chìa khóa và giá trị riêng biệt các đối số (nó thực sự có thể lấy bất kỳ sự kết hợp nào của các đối số mà các hàm tạo của loại tương ứng pair
có thể mất). Ngoài việc gọn gàng về cú pháp, nó cũng có khả năng hiệu quả hơn make_pair
, bởi vì make_pair
thường sẽ tạo ra một đầu ra có loại không khớp chính xác với số value_type
của vùng chứa và do đó nó phải chuyển đổi loại không cần thiết.
Tôi từng đề nghị này, mà cũng chỉ hoạt động trong C++ 11 hoặc sau này:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
Điều này tránh việc sử dụng hơi đáng ngạc nhiên của emplace
, nhưng nó trước đây không hoạt động nếu khóa hoặc giá trị loại chỉ di chuyển (ví dụ: unique_ptr
). Điều đó đã được khắc phục trong tiêu chuẩn, nhưng việc triển khai thư viện chuẩn của bạn có thể chưa được khắc phục. Điều này về mặt lý thuyết có thể kém hiệu quả hơn một chút, nhưng theo cách mà bất kỳ trình biên dịch nửa chừng nào cũng có thể dễ dàng tối ưu hóa.
Nguồn
2013-11-13 00:26:59
Bạn đã thử mã nào? – Mark