2017-07-20 20 views
9

Có phải std::map bài tập sao chép (theo kiểu map1 = map2;) bắt buộc để sao chép bộ so sánh của map2 đến map1?Does std :: map gán bộ so sánh của nó?

Tôi đã thử nghiệm rằng triển khai thực tế thực hiện điều đó. Tôi quan tâm nhiều hơn về nơi trong tiêu chuẩn C++ nó được chỉ định.

Trả lời

11

Nếu chúng ta nhìn vào [associative.reqmts]/12 chúng tôi có

Khi một container kết hợp được xây dựng bằng cách thông qua sự so sánh đối tượng container không được lưu trữ một con trỏ hoặc tham chiếu đến đối tượng trôi qua, ngay cả khi đối tượng đó được truyền qua tham chiếu. Khi một thùng chứa liên kết được sao chép, thông qua một hàm tạo bản sao hoặc một toán tử gán, vùng chứa đích sau đó sẽ sử dụng đối tượng so sánh từ thùng chứa được sao chép, như thể đối tượng so sánh đó đã được chuyển tới vùng chứa đích trong hàm tạo của nó.

tôi nhấn mạnh

Vì vậy, trong ví dụ của bạn, map1 sẽ nhận được một bản sao của so sánh map2 's.

-2

Từ cplusplus.com bạn có thể thấy rằng dưới sao chép constructor (3) nói

(3) map (const map& x);

Container giữ một bản sao nội bộ của alloc và comp, được sử dụng để phân bổ lưu trữ và sắp xếp các phần tử trong suốt thời gian tồn tại của nó. Trình tạo bản sao (3) tạo vùng chứa giữ và sử dụng bản sao của đối tượng phân bổ và so sánh của x.

+3

OP không yêu cầu tham chiếu Chuẩn không? Ngoài ra, 'cplusplus.com' không phải là một tài liệu tham khảo đáng tin cậy cho bất cứ điều gì. – Rakete1111

+1

OP cũng hỏi về toán tử gán bản sao, không phải là hàm tạo bản sao. – NathanOliver

+0

Tôi đã hỏi về toán tử =. Một phần của lý do yêu cầu nó là các trang web như cplusplus.com không nói gì về chi tiết quan trọng đó. Xem: http://www.cplusplus.com/reference/map/map/operator=/ –

Các vấn đề liên quan