কম্পিউটার টিউটোরিয়াল

C++ STL-এ set এবং unordered_set এর পার্থক্য

এই আর্টিকেলে আমরা C++ STL-এ set এবং unordered_set কী এবং তাদের মধ্যে পার্থক্য বুঝব।

set কী?

Set একটি অ্যাসোসিয়েটিভ কন্টেইনার যা টাইপ Key-এর এক সেট সাজানো এবং অনন্য (unique) অবজেক্ট ধারণ করে। প্রতিটি এলিমেন্ট শুধু একবার থাকতে পারে, ডুপ্লিকেট অনুমোদিত নয়। ব্যবহারকারী যেকোনো ক্রমে এলিমেন্ট ইনসার্ট করতে পারে, কিন্তু set স্বয়ংক্রিয়ভাবে সেগুলো সর্টেড করে দেয়।

Set কখন ব্যবহার করবেন?

  • যখন সর্টেড ডেটা প্রয়োজন।
  • যখন ডুপ্লিকেট মান নয়, শুধু ইউনিক ডেটা প্রয়োজন।
  • যখন হ্যাশ টেবিলের পরিবর্তে বাইনারি সার্চ ট্রি ব্যবহার করতে চান।
  • যখন সার্চ টাইম O(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() {
    int arr[] = {2, 1, 5, 6, 9, 3, 2};
    int size = sizeof(arr) / sizeof(arr[0]);
    set<int> SET;
    for (int i = 0; i < size; i++) {
        SET.insert(arr[i]);
    }
    cout << "Values in set are: ";
    for (auto it = SET.begin(); it != SET.end(); it++) {
        cout << *it << " ";
    }
}

আউটপুট

Values in set are: 1 2 3 5 6 9

unordered_set কী?

Unordered_set একটি অ্যাসোসিয়েটিভ কন্টেইনার যা র‍্যান্ডমলি ইনসার্ট করা ডেটার একটি অসাজানো সেট ধারণ করে। এটিও ডুপ্লিকেট অনুমোদন করে না। কিন্তু এটি ডেটাকে সাজায় না, ইনসার্ট করা ক্রম অনুযায়ী বা হ্যাশের মাধ্যমে র‍্যান্ডমলি রাখে।

Unordered_set কখন ব্যবহার করবেন?

  • যখন সর্টেড ডেটা প্রয়োজন নয়।
  • যখন ডুপ্লিকেট মান নয়, শুধু ইউনিক ডেটা প্রয়োজন।
  • যখন বাইনারি সার্চ ট্রির পরিবর্তে হ্যাশ টেবিল ব্যবহার করতে চান।
  • যখন দ্রুত সার্চ প্রয়োজন (গড়ে O(1), খারাপ কেসে O(n))।

উদাহরণ

ইনপুট: set = {2, 1, 5, 6, 9, 3, 2}

আউটপুট: 3, 6, 5, 9, 2, 1 (ক্রম যেকোনো হতে পারে)

#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;
    for (int i = 0; i < size; i++) {
        U_SET.insert(arr[i]);
    }
    cout << "Values in unordered set are: ";
    for (auto it = U_SET.begin(); it != U_SET.end(); it++) {
        cout << *it << " ";
    }
}

আউটপুট

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

সারসংক্ষেপ: set vs unordered_set

বিষয় set unordered_set
অন্ডারলাইন ডেটা স্ট্রাকচার বাইনারি সার্চ ট্রি (Red-Black Tree) হ্যাশ টেবিল
সর্টিং সর্টেড থাকে অসাজানো থাকে
সার্চ কমপ্লেক্সিটি O(log n) গড়ে O(1), খারাপে O(n)
ইনসার্শন/ডিলিশন O(log n) গড়ে O(1)
  1. C++ STL-এ স্ট্যাক (Stack)

  2. C++ STL-এ Set Union বাস্তবায়ন: দুটি সেটের ইউনিয়ন

  3. C++ STL-এ Set Intersection বাস্তবায়ন: দুটি সেটের অন্তঃসেট

  4. C++ STL-এ Set Difference বাস্তবায়ন: সেট বিয়োগ