পুনরাবৃত্তকারী-> দ্বিতীয় অর্থ কী?


157

সি ++ এ, এর ধরন কী std::map<>::iterator?

আমরা জানি একটি বস্তু যে itধরনের std::map<A,B>::iteratorএকটি ওভারলোড হয়েছে operator ->যা ফেরৎ std::pair<A,B>*, এবং যে std::pair<>একটি আছে firstএবং secondসদস্য।

তবে, এই দুই সদস্য কীসের সাথে সামঞ্জস্য করবেন এবং মানচিত্রে সঞ্চিত মানটি কেন আমাদের অ্যাক্সেস করতে হবে it->second?


14
একটি std::mapএকটি সঞ্চয় করে কী এবং একটি মানমানmap::iterator.second বোঝায় ।
অলোক সেভ

উত্তর:


247

আমি নিশ্চিত আপনি জানেন যে একটি std::vector<X>স্টোর একটি পুরো গুচ্ছ Xবস্তু সঞ্চয় করে, তাই না? তবে আপনার যদি একটি থাকে তবে std::map<X, Y>এটি আসলে যা সঞ্চয় করে তা হ'ল পুরো std::pair<const X, Y>গুলি। মানচিত্রটি হ'ল এটি - কী এবং সম্পর্কিত মানগুলিকে একত্রিত করে।

আপনি যখন একটি এর উপর পুনরাবৃত্তি std::map, আপনি এই সমস্ত এর উপর পুনরাবৃত্তি std::pair। আপনি যখন এই পুনরাবৃত্তকারীগুলির মধ্যে একটিকে ডিফারেন্স করেন, আপনি std::pairকী এবং এর সাথে সম্পর্কিত মান সমন্বিত পাবেন।

std::map<std::string, int> m = /* fill it */;
auto it = m.begin();

এখানে, আপনি এখন যদি করেন *it, আপনি std::pairমানচিত্রে প্রথম উপাদানটির জন্য এটি পাবেন।

এখন টাইপটি std::pairআপনাকে দুটি সদস্যের মাধ্যমে এর উপাদানগুলিতে অ্যাক্সেস দেয়: firstএবং second। তাই আপনি যদি একটি আছে std::pair<X, Y>বলা p, p.firstএকটি হল Xবস্তু এবং p.secondএকটি হল Yঅবজেক্ট।

সুতরাং এখন আপনি জানেন যে একটি std::mapপুনরুক্তি বিশিষ্ট করা আপনাকে একটি দেয় std::pair, তারপরে firstএবং এর উপাদানগুলি অ্যাক্সেস করতে পারেন second। উদাহরণস্বরূপ, (*it).firstআপনাকে কীটি দেবে এবং (*it).secondআপনাকে মান দেবে। এই হয় সমতুল্য it->firstএবং it->second


4
কেন তারা প্রোগ্রামিং-এ অন্যান্য কিছুর মতো কেবল [0] এবং [1] ("প্রথম" এবং "দ্বিতীয়" এর জন্য ব্যবহার করে না?

21
@ অ্যাডামক্রস কারণ operator[]একটি নির্দিষ্ট টাইপ ফিরে আসতে হবে firstএবং secondবিভিন্ন ধরণের হতে পারে। অন্যদিকে, সূচক অনুসারে এর উপাদানগুলিতে অ্যাক্সেসের জন্য std::tupleএকটি বিশেষ সহায়ক ফাংশন রয়েছে std::get
জোসেফ ম্যানসফিল্ড

16

কোনটির উপাদানগুলির প্রকার std::map(যা সেই মানচিত্রের পুনরাবৃত্তিকারীকে অবজ্ঞার দ্বারা প্রাপ্ত একটি অভিব্যক্তির ধরণ) যার কী Kএবং মান Vহ'ল std::pair<const K, V>- কীটি constআপনাকে মানচিত্রের মানগুলির অভ্যন্তরীণ বাছাইয়ে হস্তক্ষেপ করা থেকে বিরত রাখতে পারে।

std::pair<>বেশ স্বজ্ঞাত অর্থ সহ দুটি সদস্যের নাম firstএবং second( এখানে দেখুন ) রয়েছে। সুতরাং, iএকটি নির্দিষ্ট মানচিত্রে একটি পুনরাবৃত্তি দেওয়া , অভিব্যক্তি:

i->first

যা সমান:

(*i).first

বোঝায় প্রথম ( const) এর উপাদান pairবস্তুর পুনরুক্তিকারীর দ্বারা প্রতি ইঙ্গিত - অর্থাৎ এটি একটি বোঝায় কী মানচিত্রে। পরিবর্তে, অভিব্যক্তি:

i->second

যা সমান:

(*i).second

এর দ্বিতীয় উপাদানটিকে বোঝায় pair- অর্থাত মানচিত্রে সংশ্লিষ্ট মানকে


5
"কী" এবং "মান" শব্দটি "প্রথম" এবং "দ্বিতীয়" এর চেয়ে বেশি স্বজ্ঞাত হত, যা বোঝায় আদেশ।
অহফার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.