2013-04-23 37 views
5

Đoạn mã này có vẻ hoạt động tốt, với giá trị mặc định cho chúng value_type (int) là 0; nó có hoạt động cho mọi trường hợp không?std :: map <string,int> khởi tạo mặc định giá trị

std::map<std::string,int> w; 
for (const auto& t: str) 
    w[t]++; 

Còn gấp đôi thì sao? bản đồ? mặc định 0.0?

+1

Tôi không thể hiểu những gì bạn đang thực sự yêu cầu. Bạn có thể rephrase? –

+0

Xin lỗi vì nhầm lẫn. Các câu trả lời dưới đây rất hữu ích. – wenfeng

Trả lời

5

Có, mã này sẽ hoạt động đối với bất kỳ loại khóa nào, bao gồm double. Lý do hoạt động này là không phải là operator [] trả về tham chiếu vào giá trị ở khóa chứ không phải bản sao của giá trị đó. Đó là tham chiếu mà toán tử ++ được áp dụng.

Mã đoạn mà bạn hiển thị các công trình như sau:

  • Đối với mỗi phím t loại string trong str container,
  • Bản đồ w đang tìm kiếm các trao chìa khóa
  • Kể từ khi nhập không có ở đó, một hình mới được chèn vào bản đồ
  • Vì khóa của mục nhập được biết, nhưng giá trị không phải là, đối tượng mặc định cho giá trị được tạo
  • Một tham chiếu đến đối tượng mới được tạo ra (trong trường hợp này, int& khởi tạo zero) được trả lại cho người gọi
  • Nhà điều hành ++ được áp dụng cho các tài liệu tham khảo trở về từ các [], làm thay đổi 0-1 (hoặc 0.0 để 1.0 , vv)
+0

Cảm ơn bạn đã giải thích! Rất hữu ích! – wenfeng

+0

Tôi hiểu. Cảm ơn. Đây thực sự là câu hỏi đầu tiên của tôi về stackoverflow. – wenfeng

6

Có. Khi bạn sử dụng [] -operator trên bản đồ và không có phần tử nào có khóa mong muốn tồn tại, phần tử mới được chèn vào được khởi tạo giá trị. Đối với một số nguyên, điều này có nghĩa là khởi tạo bằng không.

1

nó có hoạt động cho mọi trường hợp không?

Đối với tất cả các trường hợp, khóa mới sẽ được liên kết với giá trị được khởi tạo là T().

Khi T được tích hợp hoặc Plain Old Data loại, chẳng hạn như int hoặc double, đánh giá là không.

Khi T là một lớp, bản đồ sẽ cố gắng gọi hàm khởi tạo trống.

+0

Nếu lớp này có một hàm tạo mặc định. Nếu không nó sẽ không biên dịch được. – andrjas

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