Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ STL में set बनाम unordered_set - अंतर और उपयोग


Set क्या है?

Set एक एसोसिएटिव कंटेनर (associative container) है जिसमें Key प्रकार की अनुक्रमित (sorted) अद्वितीय (unique) वस्तुएं होती हैं। प्रत्येक तत्व केवल एक बार आ सकता है, डुप्लिकेट अनुमत नहीं हैं। उपयोगकर्ता किसी भी क्रम में तत्व डाल सकता है, लेकिन set स्वचालित रूप से क्रमबद्ध डेटा लौटाता है।

Set कब उपयोग करें?

  • जब क्रमबद्ध डेटा चाहिए
  • जब केवल अद्वितीय मान चाहिए
  • जब बाइनरी सर्च ट्री (BST) आधारित संरचना चाहिए
  • खोज समय O(log n) स्वीकार्य है

उदाहरण

#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 << "Set में मान: ";
    for (auto it = SET.begin(); it != SET.end(); it++)
        cout << *it << " ";
    return 0;
}

आउटपुट: 1 2 3 5 6 9 (क्रमबद्ध, डुप्लिकेट हटाया गया)

Unordered_set क्या है?

Unordered_set एक एसोसिएटिव कंटेनर है जिसमें यादृच्छिक (random) क्रम में डाले गए अद्वितीय तत्व होते हैं। यह हैश टेबल (hash table) पर आधारित है।

Unordered_set कब उपयोग करें?

  • जब क्रमबद्ध डेटा की आवश्यकता नहीं है
  • जब केवल अद्वितीय मान चाहिए
  • जब हैश टेबल आधारित संरचना चाहिए
  • जब तेज़ खोज चाहिए: औसत O(1), सबसे खराब O(n)

उदाहरण

#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 << "Unordered_set में मान: ";
    for (auto it = U_SET.begin(); it != U_SET.end(); it++)
        cout << *it << " ";
    return 0;
}

आउटपुट: 3 6 5 9 2 1 (क्रम यादृच्छिक)

तुलना तालिका

विशेषताsetunordered_set
क्रमक्रमबद्ध (Sorted)अक्रमित (Unsorted)
आधारबाइनरी सर्च ट्री (Red-Black Tree)हैश टेबल
खोज समयO(log n)औसत O(1), सबसे खराब O(n)
सम्मिलन/हटानाO(log n)औसत O(1)
मेमोरीकमअधिक (हैश टेबल ओवरहेड)
इटरेटर अमान्यताकेवल हटाए गए तत्व पररीहैश पर सभी अमान्य
  1. C++ STL में Set_Union का कार्यान्वयन C++ STL में Set_Union का कार्यान्वयन

    दो सेट का यूनियन उन तत्वों द्वारा बनाया जाता है जो या तो एक सेट में मौजूद होते हैं, या दोनों में। दूसरे सेट के वे तत्व जिनका पहला सेट में समान तत्व होता है, परिणाम सेट में कॉपी नहीं किए जाते। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set Difference

  1. C++ STL में Set_Intersection का कार्यान्वयन C++ STL में Set_Intersection का कार्यान्वयन

    दो सेट का इंटरसेक्शन केवल उन तत्वों द्वारा बनता है जो दोनों सेट में कॉमन होते हैं। फंक्शन द्वारा कॉपी किए गए तत्व हमेशा पहले सेट से उसी क्रम में आते हैं। दोनों सेट में तत्व पहले से क्रमबद्ध होने चाहिए। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set

  1. C++ STL में Set_Difference का कार्यान्वयन C++ STL में Set_Difference का कार्यान्वयन

    दो सेट का डिफरेंस केवल उन तत्वों द्वारा बनता है जो पहले सेट में मौजूद होते हैं, दूसरे सेट में नहीं। फंक्शन द्वारा कॉपी किए गए तत्व हमेशा पहले सेट से उसी क्रम में आते हैं। दोनों सेट में तत्व पहले से क्रमबद्ध होने चाहिए। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या