C++ ভেক্টর অফ পেয়ার

C Bhektara Apha Peyara



C++ এ, একটি ভেক্টর একটি বহুমুখী ধারক যা গতিশীলভাবে নিজের আকার পরিবর্তন করতে পারে যা উপাদানগুলির দক্ষ হেরফের করার অনুমতি দেয়। যদিও একটি জোড়া একটি সাধারণ ধারক যা দুটি ভিন্নধর্মী বস্তু ধারণ করতে পারে যা সম্পর্কিত ডেটা সংযুক্ত এবং পরিচালনা করার জন্য একটি সুবিধাজনক উপায় প্রদান করে। যখন এই জোড়াগুলি একটি ভেক্টরের মধ্যে সংগঠিত হয়, তখন বিকাশকারীরা কী-মান জোড়ার গতিশীল সংগ্রহ বা দুটি স্বতন্ত্র উপাদানের অন্য কোনো সমন্বয় তৈরি করার ক্ষমতা অর্জন করে।

এই ডেটা স্ট্রাকচারটি এমন পরিস্থিতিতে বিশেষভাবে উপযোগী যেখানে উপাদানগুলিকে জোড়া হিসাবে সংরক্ষণ করতে হবে যেমন কী-মান জোড়া নিয়ে কাজ করার সময় বা সত্তার মধ্যে সম্পর্কগুলিকে উপস্থাপন করার সময়। এই নিবন্ধে, আমরা জোড়াগুলির একটি C++ ভেক্টরের ধারণাটি অন্বেষণ করব এবং এর ব্যবহারিক প্রয়োগগুলিকে চিত্রিত করার জন্য বিভিন্ন উদাহরণগুলি অন্বেষণ করব।







উদাহরণ 1: মৌলিক ব্যবহার: জোড়ার ভেক্টরের উপর পুনরাবৃত্তি করা

আসুন একটি মৌলিক উদাহরণ বিবেচনা করি যেখানে আমরা জোড়ার একটি ভেক্টর তৈরি করি যা ছাত্রদের নাম এবং তাদের সংশ্লিষ্ট বয়সগুলিকে প্রতিনিধিত্ব করে। জোড়ার ভেক্টরের উপর পুনরাবৃত্তি করা একটি নিয়মিত ভেক্টরের উপর পুনরাবৃত্তি করার অনুরূপ। ভেক্টরের মধ্যে প্রতিটি জোড়া পুনরুদ্ধার করতে কেউ হয় পুনরাবৃত্তিকারী বা পরিসর-ভিত্তিক 'ফর' লুপ ব্যবহার করতে পারে।



এই উদাহরণটি একটি অর্থপূর্ণ প্রেক্ষাপটে 'জোড়ার ভেক্টর'-এর জন্য সিনট্যাক্স দেখায়।



# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত <ভেক্টর>
# অন্তর্ভুক্ত <ইউটিলিটি>

int প্রধান ( ) {

std:: ভেক্টর < std::জোড়া < std::স্ট্রিং, int >> ছাত্র তথ্য;

studentData.push_back ( std::make_pair ( 'আদম' , বিশ ) ) ;
studentData.push_back ( std::make_pair ( 'বিল' , 22 ) ) ;
studentData.push_back ( std::make_pair ( 'চার্লি' , একুশ ) ) ;

std::cout << 'ছাত্রদের তথ্য: \n ' ;
জন্য ( const স্বয়ংক্রিয় এবং ছাত্র: ছাত্র ডেটা ) {
std::cout << 'নাম:' << ছাত্র।প্রথম << ', বয়স:' << student.second << std::endl;
}

ফিরে 0 ;
}


এই C++ কোড স্নিপেটে, আমরা তিনটি প্রয়োজনীয় হেডার ফাইল অন্তর্ভুক্ত করে শুরু করি: ইনপুট এবং আউটপুট অপারেশনের জন্য ' ', ভেক্টর কন্টেইনার ব্যবহার করার জন্য '' এবং 'std: অ্যাক্সেস করার জন্য '': pair” টেমপ্লেট। এই শিরোনামগুলি আমাদের প্রোগ্রামের জন্য প্রয়োজনীয় কার্যকারিতাগুলি ব্যবহার করতে সক্ষম করে।





এগিয়ে চলুন, main() ফাংশনের মধ্যে, আমরা 'std::vector' কন্টেইনার ব্যবহার করে 'studentData' নামে একটি ভেক্টর ঘোষণা করি। এই ভেক্টরটি জোড়াগুলিকে সংরক্ষণ করার জন্য ডিজাইন করা হয়েছে যেখানে প্রতিটি জোড়া একটি ছাত্রের নাম (একটি 'std::string' হিসাবে উপস্থাপিত) এবং তাদের বয়স (একটি 'int' পূর্ণসংখ্যা) অন্তর্ভুক্ত করে। তারপর, আমরা তিনটি জোড়া দিয়ে 'স্টুডেন্টডেটা' ভেক্টর তৈরি করি। 'পুশ_ব্যাক' ফাংশন ব্যবহার করে, ভেক্টরের শেষে জোড়া যোগ করা হয়, গতিশীলভাবে এর আকার সামঞ্জস্য করে। একটি লুপ তারপর 'ছাত্র ডেটা' এর মাধ্যমে পুনরাবৃত্তি করে, প্রতিটি ছাত্রের নাম এবং বয়স বের করে এবং মুদ্রণ করে। আউটপুট 'স্টুডেন্ট ডেটা:' প্রদর্শন করে যা কাঠামোগত প্রতিনিধিত্বের উপর জোর দেয়। ছাত্রদের নাম এবং বয়স আলাদাভাবে মুদ্রিত হয়, পরিষ্কারভাবে সংরক্ষিত ডেটা উপস্থাপন করে।



উদাহরণ 2: জোড়ার ভেক্টর বাছাই করা

জোড়ার ভেক্টর বাছাই করা একটি সাধারণ ক্রিয়াকলাপ, বিশেষ করে যখন কী-মান অ্যাসোসিয়েশনের সাথে কাজ করে। এই উদ্দেশ্যে '<অ্যালগরিদম>' হেডার থেকে 'std::sort' ফাংশন ব্যবহার করা যেতে পারে। আসুন প্রথম এবং দ্বিতীয় উপাদানের উপর ভিত্তি করে জোড়ার ভেক্টরকে কীভাবে সাজানো যায় তা দেখি:

# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত <ভেক্টর>
# অন্তর্ভুক্ত <অ্যালগরিদম>

int প্রধান ( ) {

std:: ভেক্টর < std::জোড়া < std::স্ট্রিং, int >> তথ্য

info.push_back ( std::make_pair ( 'পিটার' , পনের ) ) ;
info.push_back ( std::make_pair ( 'ডোরা' , 29 ) ) ;
info.push_back ( std::make_pair ( 'হানা' , বিশ ) ) ;

std::cout << 'মূল তথ্য: \n ' ;
জন্য ( const স্বয়ংক্রিয় এবং এন্ট্রি: তথ্য ) {
std::cout << 'নাম:' << entry.first << ', বয়স:' << entry.second << std::endl;
}


std:: sort ( info.begin ( ) , info.end ( ) ) ;

std::cout << ' \n সাজানো তথ্য: \n ' ;
জন্য ( const স্বয়ংক্রিয় এবং এন্ট্রি: তথ্য ) {
std::cout << 'বয়স:' << entry.second << ', নাম:' << entry.first << std::endl;
}

ফিরে 0 ;
}


এই C++ কোডের উদাহরণে, আমরা ব্যক্তিদের, বিশেষ করে তাদের নাম এবং বয়সের সাথে সম্পর্কিত ডেটা সঞ্চয় এবং ম্যানিপুলেট করার জন্য জোড়ার ভেক্টরের সাথে কাজ করছি। আমরা main() ফাংশনের মধ্যে 'সংযোগের তথ্য' নামে একটি ভেক্টর শুরু করি। পরবর্তীকালে, আমরা এই ভেক্টরটিকে তিনটি জোড়া দিয়ে তৈরি করি, যার প্রত্যেকটিতে একটি পৃথক ব্যক্তির নাম এবং বয়স রয়েছে, দক্ষ জোড়া তৈরির জন্য 'পুশ_ব্যাক' ফাংশন এবং 'std::make_pair' ব্যবহার করে।

আমরা কনসোলে 'মূল তথ্য' আউটপুট করি। এতে 'তথ্য' ভেক্টরের মাধ্যমে পুনরাবৃত্তি করা এবং প্রতিটি জোড়ার উপাদান মুদ্রণ করা জড়িত। তারপর, আমরা প্রতিটি জোড়ার প্রথম উপাদানের (এই ক্ষেত্রে, নামগুলি) তুলনা করে এমন জোড়াগুলির জন্য ডিফল্ট তুলনা অপারেটরের উপর ভিত্তি করে 'তথ্য' ভেক্টরটিকে পুনরায় সাজানোর জন্য 'std::sort' অ্যালগরিদম ব্যবহার করি। বাছাই অপারেশন অনুসরণ করে, আমরা আবার সংশোধিত 'তথ্য' ভেক্টরের মাধ্যমে সাজানো তথ্য প্রিন্ট করে পুনরাবৃত্তি করি। এই সময়, আউটপুট বাছাই প্রক্রিয়ার ফলাফল চিত্রিত করে, বয়স-প্রথম ক্রমের উপর জোর দেয়।

উদাহরণ 3: বিভিন্ন ধরনের ভেক্টরের সমন্বয়

আপনি এমন কিছু পরিস্থিতির সম্মুখীন হতে পারেন যেখানে আপনাকে অবশ্যই দুটি ভেক্টর থেকে একটি তথ্য একত্রিত করতে হবে। জোড়ার একটি ভেক্টর দুটি ভেক্টরের উপাদানগুলির মধ্যে সংযোগ বজায় রাখতে সাহায্য করতে পারে।

# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত <ভেক্টর>

int প্রধান ( ) {
std:: ভেক্টর < std::স্ট্রিং > শহর = { 'নিউ ইয়র্ক' , 'প্যারিস' , 'টোকিও' } ;
std:: ভেক্টর < int > জনসংখ্যা = { 8175133 , 2140526 , 37435191 } ;

std:: ভেক্টর < std::জোড়া < std::স্ট্রিং, int >> শহর জনসংখ্যা জোড়া;

জন্য ( size_t i = 0 ; i < std::মিনিট ( city.size ( ) , জনসংখ্যা. আকার ( ) ) ; ++আমি ) {
cityPopulationPairs.push_back ( { শহরগুলি [ i ] , জনসংখ্যা [ i ] } ) ;
}

std::cout << 'শহর-জনসংখ্যা জোড়া:' << std::endl;
জন্য ( const স্বয়ংক্রিয় এবং জোড়া: শহর জনসংখ্যা জোড়া ) {
std::cout << 'শহর:' << pair.first << ', জনসংখ্যা: ' << pair.second << std::endl;
}

ফিরে 0 ;
}


কোডের 'প্রধান' ফাংশনে, দুটি ভেক্টর ঘোষণা করা হয়: 'শহর' শহরের নাম সংরক্ষণ করতে এবং 'জনসংখ্যা' সংশ্লিষ্ট জনসংখ্যার মান সংরক্ষণ করতে।

একটি তৃতীয় ভেক্টর, 'city PopulationPairs', শহরগুলির জোড়া এবং তাদের নিজ নিজ জনসংখ্যা সংরক্ষণ করার জন্য সংজ্ঞায়িত করা হয়। প্রতিটি জোড়া হল “std::pair” যেখানে “std::string” শহরের নাম এবং “int” জনসংখ্যাকে প্রতিনিধিত্ব করে। তারপরে আমরা 'std::min' ব্যবহার করে ভেক্টরের (শহর এবং জনসংখ্যা) উপর একটি 'for' লুপ পুনরাবৃত্তি ব্যবহার করি যাতে লুপ দুটি ভেক্টর আকারের চেয়ে ছোট উপাদানগুলিতে অ্যাক্সেস না করে। লুপের ভিতরে, শহর-জনসংখ্যার তথ্যের জোড়া তৈরি করা হয় এবং 'cityPopulationPairs' ভেক্টরে যুক্ত করা হয়।

তথ্য একত্রিত করার পরে, আরেকটি 'এর জন্য' লুপ ব্যবহার করা হয় জোড়ার মাধ্যমে পুনরাবৃত্তি করতে যা 'cityPopulationPairs' এ সংরক্ষিত থাকে। তারপরে সম্মিলিত ডেটা 'std::cout' ব্যবহার করে স্ট্যান্ডার্ড আউটপুটে প্রদর্শিত হয়, স্পষ্টভাবে প্রতিটি শহর এবং এর সংশ্লিষ্ট জনসংখ্যাকে প্রতিনিধিত্ব করে।

উদাহরণ 4: সর্বাধিক এবং সর্বনিম্ন মানগুলি সন্ধান করা

একটি ডেটাসেটের মধ্যে সর্বনিম্ন এবং সর্বাধিক মানগুলি সনাক্ত করা অ্যালগরিদমিক এবং পরিসংখ্যানগত ক্রিয়াকলাপের একটি সাধারণ প্রয়োজন৷ ক্রমানুসারে সর্বাধিক এবং সর্বনিম্ন উভয় মানের ট্র্যাক রাখতে আমরা জোড়ার ভেক্টর ব্যবহার করতে পারি:

# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত <ভেক্টর>
# অন্তর্ভুক্ত <অ্যালগরিদম>

int প্রধান ( ) {
std:: ভেক্টর < int > সংখ্যা = { 5 , 12 , 18 , 3 , 7 , 4 , 33 } ;

std:: ভেক্টর < std::জোড়া < তুমি, তুমি >> minMaxPairs;

std:: sort ( সংখ্যা ( ) , numbers.end ( ) ) ;

minMaxPairs.push_back ( { numbers.front ( ) , সংখ্যা.ব্যাক ( ) } ) ;

std::cout << 'সর্বনিম্ন-সর্বোচ্চ জোড়া:' << std::endl;
জন্য ( const স্বয়ংক্রিয় এবং জোড়া: minMaxPairs ) {
std::cout << 'মিনিট:' << pair.first << ', সর্বোচ্চ:' << pair.second << std::endl;
}

ফিরে 0 ;
}


প্রদত্ত C++ কোডটি পূর্ণসংখ্যার একটি ভেক্টরে সর্বনিম্ন এবং সর্বাধিক মানগুলি খুঁজে বের করার প্রক্রিয়া প্রদর্শন করে এবং তারপর এই মানগুলিকে জোড়ার ভেক্টরে সংরক্ষণ করে। 'সংখ্যা' নামে একটি ভেক্টর প্রাথমিকভাবে ঘোষণা করা হয় এবং পূর্ণসংখ্যার সেট দিয়ে শুরু করা হয়। ডেটাসেটের সর্বনিম্ন এবং সর্বাধিক মানগুলি দক্ষতার সাথে সনাক্ত করতে, প্রোগ্রামটি অ্যালগরিদম লাইব্রেরি থেকে 'std::sort' ফাংশন ব্যবহার করে।

এই ফাংশনটির লক্ষ্য হল উপাদানগুলিকে আরোহী ক্রমে সাজানো, ডেটাসেটের সর্বনিম্ন এবং সর্বোচ্চ উভয় মান সনাক্ত করার প্রক্রিয়াকে সরল করা। বাছাই অপারেশনটি 'সংখ্যা' ভেক্টরে প্রয়োগ করা হয় numbers.begin() এবং numbers.end() পরিসীমা প্যারামিটার হিসাবে ব্যবহার করে। বাছাই ধাপ অনুসরণ করে, প্রোগ্রামটি গণনা করা সর্বনিম্ন এবং সর্বাধিক মান সংরক্ষণ করতে জোড়ার একটি ভেক্টর তৈরি করে, 'minMaxPairs'। তারপরে 'পুশ_ব্যাক' ফাংশনটি একটি একক জোড়া যোগ করার জন্য নিযুক্ত করা হয় যাতে সাজানো সংখ্যা ভেক্টরের প্রথম (ন্যূনতম) এবং শেষ (সর্বোচ্চ) উপাদান রয়েছে। অবশেষে, প্রোগ্রামটি 'minMaxPairs' ভেক্টরের মাধ্যমে পুনরাবৃত্তি করে এবং সর্বনিম্ন এবং সর্বাধিক মানগুলি প্রদর্শন করে ফলাফল আউটপুট করে।

উপসংহার

উপসংহারে, জোড়ের C++ ভেক্টর একটি শক্তিশালী এবং নমনীয় ডেটা স্ট্রাকচার হিসেবে আবির্ভূত হয়, যা প্রোগ্রামিং কাজগুলিতে বহুমুখীতার একটি স্তর যুক্ত করে। এর সিনট্যাক্স এবং ব্যবহারিক প্রয়োগের বিস্তারিত অন্বেষণের মাধ্যমে, আমরা দেখেছি কীভাবে এই ধারকটি কী-মানের অ্যাসোসিয়েশনগুলিকে সংগঠিত করতে, বিভিন্ন ভেক্টর থেকে তথ্য একত্রিত করতে এবং সর্বনিম্ন এবং সর্বোচ্চ মানগুলি ট্র্যাক করতে সাহায্য করে।