Tôi chắc chắn bạn biết rằng std::vector<X>
lưu trữ toàn bộ một loạt các đối tượng X
, phải không? Nhưng nếu bạn có một std::map<X, Y>
, những gì nó thực sự lưu trữ là một bó toàn bộ std::pair<const X, Y>
s. Đó chính xác là bản đồ - nó kết hợp các khóa và các giá trị liên quan.
Khi bạn lặp qua một số std::map
, bạn đang lặp qua tất cả các số std::pair
giây này. Khi bạn dereference một trong những iterators, bạn nhận được một std::pair
có chứa khóa và giá trị liên quan của nó.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
Ở đây, nếu bây giờ bạn làm *it
, bạn sẽ nhận được các std::pair
cho các phần tử đầu tiên trong bản đồ.
Bây giờ, loại std::pair
cung cấp cho bạn quyền truy cập vào các thành phần thông qua hai thành viên: first
và second
. Vì vậy, nếu bạn có std::pair<X, Y>
được gọi là p
, p.first
là đối tượng X
và p.second
là đối tượng Y
.
Vì vậy, bây giờ bạn biết rằng dereferencing một iterator std::map
mang đến cho bạn một std::pair
, sau đó bạn có thể truy cập phần tử của nó với first
và second
. Ví dụ: (*it).first
sẽ cung cấp cho bạn khóa và (*it).second
sẽ cung cấp cho bạn giá trị. Chúng tương đương với it->first
và it->second
.
Nguồn
2013-03-16 16:04:19
Bản đồ 'std :: map' lưu trữ * khóa * và * giá trị * .'map :: iterator.second' dùng để chỉ * giá trị *. –
@AlokSave: Cảm ơn. Nhận xét của bạn đã lưu rất nhiều độc giả đọc hai câu trả lời, rõ ràng, có thể đã bị thu hẹp về độ dài của một tweet. – displayName