Bu, işaretçiler için de geçerli olan bir sorundur (yineleyici bir işaretçi gibi davranır). için değerli noktaları işaretçi (veya yineleyici) bir üyeyi erişmek için iki yol vardır:
it->first // preferred syntax: access member of the pointed-to object
veya
(*it).first // verbose syntax: dereference the pointer, access member on it
operatör öncelik
*(it.first) // wrong! tries to access a member of the pointer (iterator) itself
içine ifadesini döndüğü first
adında bir üyeye sahip olmadığından başarısız olan yineleyici üzerinde first
üyesine erişmeye çalışır. Eğer olduysa, o üyenin değerini iptal edersiniz.
Ancak, çoğu bu tür durumlarda size değerlere anahtarından eşlemek için std::map
kullanmalıdır. Yerine vector<pair<int,string> >
arasında, benzer (ekleme, yineleme ve malzeme de çiftleri ile olur) davranır map<int,string>
kullanmak gerekir, ancak daha hızlı rastgele erişim için veri yapısında anahtarları sıralar:
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;
}
Not temel bir fark arasındaki Bir harita ve çiftlerden oluşan bir vektör, bir haritanın elemanları, anahtarlarına göre sıralayarak yeniden düzenlemesidir. Ekleme sırası daha sonra sorgulanamaz. Bunu yapmak istemediğiniz durumlar vardır (ekleme siparişi söz konusu olduğunda), bu gibi durumlarda ya çözümünüz ya da en azından anahtar ve değer içeren özel tipleri olan bir vektör doğru çözümdür.
Operatör önceliğini, '*' ve '.' önceliklerini okumak isteyebilirsiniz: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B – billz