কম্পিউটার

C++ STL(3) তে সেট বনাম unordered_set


এই নিবন্ধে, আসুন C++ STL-এ কি সেট এবং unordered_set আছে তা বুঝতে পারি এবং এর মাধ্যমে তাদের মধ্যে পার্থক্য সম্পর্কে জ্ঞান লাভ করি।

কি সেট করা হয়?

একটি সেট একটি অ্যাসোসিয়েটিভ কন্টেইনার যা কী ধরণের অনন্য বস্তুর একটি সাজানো সেট ধারণ করে। প্রতিটি উপাদান শুধুমাত্র একবার ঘটতে পারে, তাই অনুলিপি অনুমোদিত নয়। একজন ব্যবহারকারী যেকোন ক্রমে উপাদান সন্নিবেশ করে একটি সেট তৈরি করতে পারেন এবং সেটটি ব্যবহারকারীকে একটি সাজানো ডেটা ফেরত দেবে যার অর্থ সেটটিতে ব্যবহারকারীর কাছ থেকে বিমূর্ত করা ডেটা সাজানোর সংজ্ঞা রয়েছে৷

সেট ব্যবহার করার প্রধান কারণ হল

  • যখন ডেটা সাজানো হয় প্রয়োজন

  • যখন ডুপ্লিকেট মান প্রয়োজন হয় না শুধুমাত্র অনন্য ডেটা প্রয়োজন হয়

  • যখন আমরা বাইনারী সার্চ ট্রি ব্যবহার করতে চাই হ্যাশ টেবিলের পরিবর্তে।

  • যখন log(n) জটিলতা লাগে অনুসন্ধানের সময় নিয়ে কোনো সমস্যা নেই অনুসন্ধানে

ইনপুট

set = {2, 1, 5, 6, 9, 3, 2}

আউটপুট

1, 2, 3, 5, 6, 9

নোট৷ − মানগুলি এলোমেলো ক্রমে ঢোকানো হয়, কিন্তু সেগুলি সেট অনুসারে সাজানো হয় এবং সেট থেকে সদৃশ মানগুলিও সরানো হয়৷

উদাহরণ

#include <iostream>
#include <set>
using namespace std;
int main(){
   //creating an array
   int arr[] = {2, 1, 5, 6, 9, 3, 2};
   int size = sizeof(arr)/ sizeof(arr[0]);
   //declaring a set
   set<int> SET;
   //inserting elements from an array to set using insert()
   for(int i = 0; i<size; i++){
      SET.insert(arr[i]);
   }
   set<int>::iterator it;
   cout<<"Values in set are: ";
   for(it = SET.begin(); it != SET.end(); it++){
      cout <<*it<<" ";
   }
}

আউটপুট

উপরের কোডের আউটপুট হবে −

Values in set are: 1 2 3 5 6 9

unordered_set কি?

একটি unordered_set একটি অ্যাসোসিয়েটিভ কন্টেনার যা এলোমেলোভাবে ঢোকানো ডেটার একটি ক্রমবিহীন সেট ধারণ করে। প্রতিটি উপাদান শুধুমাত্র একবার ঘটতে পারে, তাই অনুলিপি অনুমোদিত নয়। একজন ব্যবহারকারী যেকোন ক্রমে উপাদান সন্নিবেশ করে একটি ক্রমবিহীন সেট তৈরি করতে পারেন এবং একটি ক্রমবিহীন সেট যেকোন ক্রমে ডেটা ফেরত দেবে অর্থাৎ অ-ক্রমবিহীন আকারে।

অনুক্রমহীন সেট ব্যবহার করার প্রধান কারণ হল

  • যখন কোন বাছাই করা ডেটার প্রয়োজন হয় না মানে ডেটা একটি ক্রমবিহীন বিন্যাসে পাওয়া যায়

  • যখন ডুপ্লিকেট মান প্রয়োজন হয় না শুধুমাত্র অনন্য ডেটা প্রয়োজন হয়

  • যখন আমরা একটি বাইনারি অনুসন্ধান গাছের পরিবর্তে হ্যাশ টেবিল ব্যবহার করতে চাই।

  • যখন একটি দ্রুত অনুসন্ধানের প্রয়োজন হয় কারণ এটি গড় ক্ষেত্রে O(1) এবং সবচেয়ে খারাপ ক্ষেত্রে O(n) নেয়

ইনপুট

set = {2, 1, 5, 6, 9, 3, 2}

আউটপুট

3, 9, 6, 5, 2

উদাহরণ

#include <iostream>
#include <unordered_set>
using namespace std;
int main (){
   int arr[] = { 2, 1, 5, 6, 9, 3, 2 };
   int size = sizeof (arr) / sizeof (arr[0]);
   unordered_set < int >U_SET;
   //inserting elements from an array to an unordered_set using insert()
   for (int i = 0; i < size; i++){
      U_SET.insert (arr[i]);
   }
   unordered_set < int >::iterator it;
   cout << "Values in unordred set are: ";
   for (it = U_SET.begin (); it != U_SET.end (); it++){
      cout << *it << " ";
   }
}

আউটপুট

উপরের কোডের আউটপুট হবে −

Values in unordered set are: 3 6 5 9 2 1

  1. C++ STL(3.5) এ স্ট্যাক

  2. STL-এ সেট_ইউনিয়ন বাস্তবায়নের জন্য C++ প্রোগ্রাম

  3. STL-এ Set_Intersection বাস্তবায়নের জন্য C++ প্রোগ্রাম

  4. STL-এ সেট_ডিফারেন্স বাস্তবায়নের জন্য C++ প্রোগ্রাম