Đây cũng là vấn đề áp dụng cho con trỏ (một trình lặp hoạt động khá giống con trỏ). Có hai cách để truy cập vào một thành viên của giá trị con trỏ (hoặc iterator) điểm:
it->first // preferred syntax: access member of the pointed-to object
hoặc
(*it).first // verbose syntax: dereference the pointer, access member on it
Các ưu tiên toán tử biến biểu hiện của bạn vào
*(it.first) // wrong! tries to access a member of the pointer (iterator) itself
mà cố gắng truy cập vào thành viên first
trên bản thân trình lặp, không thành công, vì nó không có thành viên được gọi là first
. Nếu nó đã làm, bạn sau đó dereference giá trị của thành viên đó.
Tuy nhiên, trong hầu hết các trường hợp như vậy, bạn nên sử dụng std::map
để ánh xạ từ khóa đến giá trị. Thay vì vector<pair<int,string> >
, bạn nên sử dụng map<int,string>
mà ứng xử tương tự (chèn, lặp đi lặp lại và các công cụ cũng xảy ra với các cặp), nhưng nó sắp xếp các phím trong cấu trúc dữ liệu để truy cập nhanh hơn ngẫu nhiên:
map<int,string> mapper;
if(Hash(input, chordSize) != id){
mapper.push_back(make_pair(tmp, input));
}
for (map<int,string>::iterator it = mapper.begin(); it != mapper.end(); ++it)
{
cout << "1st: " << it->first << " "
<< "2nd: " << it->second << endl;
}
Lưu ý rằng một sự khác biệt chủ yếu giữa một bản đồ và một vectơ các cặp là một bản đồ sắp xếp lại các phần tử bằng cách sắp xếp chúng theo khóa của chúng. Thứ tự chèn không thể được truy vấn sau đó. Có những trường hợp bạn không muốn làm điều đó (khi thứ tự chèn quan trọng), vì vậy trong các trường hợp như vậy, giải pháp hoặc vectơ của bạn với các loại tùy chỉnh có chứa ít nhất khóa và giá trị là giải pháp đúng.
Bạn có thể muốn đọc ưu tiên toán tử, thanh toán '*' và '.' ưu tiên: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B – billz