C++ chuẩn định nghĩa một constructor std::map
sử dụng một std::initializer_list
:std :: map danh sách initializer constructor
map(std::initializer_list<value_type> init, const Allocator&);
Tuy nhiên, nơi được xác định những gì sẽ xảy ra nếu danh sách initializer chứa phím trùng lặp? Khóa đầu tiên có được chọn hay cuối cùng? Ví dụ:
std::map<std::string, int> my_map {
{"a", 1},
{"a", 2}
};
Trong thực tế, có vẻ như nó hoạt động như insert()
, do đó bản đồ bây giờ sẽ chứa {a: 1}.
Tuy nhiên, tôi không thể tìm thấy bất kỳ điều gì trong tiêu chuẩn C++ về vấn đề này.
Về mặt kỹ thuật, ít nhất là từ các phần được trích dẫn, tiêu chuẩn dường như không quyết định trong đó hoặc der các yếu tố sẽ được chèn vào. – user2079303
@ user2079303 Tốt hơn? – BoBTFish
Tôi không chắc chắn nếu đó là đủ.Chắc chắn khi iterator được truyền chỉ đơn thuần là một iterator đầu vào, chúng phải được chèn theo thứ tự, nhưng iterator của initializer_list là một iterator truy cập ngẫu nhiên và tôi không thấy một quy tắc cấm chuyên môn hóa cho các kiểu vòng lặp khác nhau. – user2079303