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


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.