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 (क्रम यादृच्छिक)
तुलना तालिका
| विशेषता | set | unordered_set |
|---|---|---|
| क्रम | क्रमबद्ध (Sorted) | अक्रमित (Unsorted) |
| आधार | बाइनरी सर्च ट्री (Red-Black Tree) | हैश टेबल |
| खोज समय | O(log n) | औसत O(1), सबसे खराब O(n) |
| सम्मिलन/हटाना | O(log n) | औसत O(1) |
| मेमोरी | कम | अधिक (हैश टेबल ओवरहेड) |
| इटरेटर अमान्यता | केवल हटाए गए तत्व पर | रीहैश पर सभी अमान्य |