2011-10-02 9 views
7

Ví dụ, đếm sự xuất hiện các từ trong một cuốn sách, tôi thấy ai đó chỉ đơn giản viết:Trong bản đồ <string, int>, có đảm bảo rằng int được khởi tạo bằng không?

map<string, int> count; 
string s; 
while (cin >> s) count[s]++; 

Đây có phải là cách chính xác làm như vậy? Tôi đã thử nghiệm trên máy tính của tôi và có vẻ như vậy. Nhưng liệu khởi tạo không được đảm bảo? Nếu nó không phải là, tôi sẽ tưởng tượng một mã như thế này:

map<string, int> count; 
string s; 
while (cin >> s) 
    if (count.find(s) != count.end()) count[s]++; 
    else count[s] = 1; 

Trả lời

12

Vâng, operator[] trên std::map sẽ khởi tạo giá trị với T(), mà trong trường hợp của int, là zero.

Đây là tài liệu trên phần 23.4.4.3 của chuẩn C++:

T& operator[](const key_type& x); 

Hiệu ứng: Nếu không có tương đương chìa khóa để x trong bản đồ, chèn value_type(x, T()) vào bản đồ.

+0

Cảm ơn bạn! Bạn có bất kỳ tài liệu tham khảo cho điểm của bạn? –