यह एक मुद्दा है जो पॉइंटर्स के लिए भी लागू होता है (एक इटेटरेटर पॉइंटर की तरह बहुत अधिक व्यवहार करता है)। वहाँ एक सदस्य मूल्य का सूचक (या इटरेटर) अंक तक पहुँचने के लिए दो तरीके हैं:
it->first // preferred syntax: access member of the pointed-to object
या
(*it).first // verbose syntax: dereference the pointer, access member on it
ऑपरेटर पूर्वता
*(it.first) // wrong! tries to access a member of the pointer (iterator) itself
में अपने अभिव्यक्ति बदल जाता है जो सदस्य first
को इटेटरेटर पर ही एक्सेस करने का प्रयास करता है, जो विफल रहता है, क्योंकि इसमें first
नामक सदस्य नहीं है। यदि ऐसा होता है, तो आप उस सदस्य के मूल्य को कम कर देंगे।
हालांकि, ज्यादातर ऐसे मामलों में आप std::map
का उपयोग मूल्यों की कुंजी से मैप करने के लिए करना चाहिए। vector<pair<int,string> >
के बजाय, आप map<int,string>
जो समान (प्रविष्टि, यात्रा और सामान भी जोड़े के साथ होता है) बर्ताव करता है का उपयोग करना चाहिए, लेकिन यह तेजी से यादृच्छिक अभिगम के लिए डेटा संरचना में चाबियाँ सॉर्ट करता:
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;
}
ध्यान दें कि दोनों के बीच एक आवश्यक अंतर एक नक्शा और जोड़ों का एक वेक्टर यह है कि एक नक्शा तत्वों को उनकी कुंजी से सॉर्ट करके पुनर्व्यवस्थित करता है। सम्मिलन के आदेश बाद में पूछताछ नहीं की जा सकती है। ऐसे मामले हैं जिनमें आप ऐसा नहीं करना चाहते हैं (जब सम्मिलन आदेश महत्वपूर्ण है), ऐसे मामलों में या तो आपके समाधान या कम से कम कुंजी और मूल्य वाले कस्टम प्रकार वाले वेक्टर सही समाधान हैं।
आप ऑपरेटर पूर्वता को पढ़ने के लिए, चेकआउट '*' और '.' पूर्वता चाहते हो सकता है: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B – billz