ในบทความนี้ ให้เราทำความเข้าใจว่าอะไรคือ set และ unordered_set ใน C++ STL และด้วยเหตุนี้จึงได้รับความรู้เกี่ยวกับความแตกต่างระหว่างกัน
ตั้งค่าอย่างไร
ชุด เป็นคอนเทนเนอร์ที่เชื่อมโยงซึ่งมีชุดของออบเจ็กต์ที่ไม่ซ้ำกันของประเภทคีย์ที่จัดเรียงไว้ แต่ละองค์ประกอบอาจเกิดขึ้นเพียงครั้งเดียว ดังนั้นจึงไม่อนุญาตให้ทำซ้ำ ผู้ใช้สามารถสร้างชุดได้โดยการแทรกองค์ประกอบในลำดับใดก็ได้ และชุดจะส่งคืนข้อมูลที่จัดเรียงไปยังผู้ใช้ ซึ่งหมายความว่าชุดประกอบด้วยคำจำกัดความสำหรับการจัดเรียงข้อมูลที่แยกจากผู้ใช้
สาเหตุหลักเมื่อตั้งค่าได้คือ −
-
เมื่อ จัดเรียงข้อมูล เป็นสิ่งจำเป็น
-
เมื่อไม่ต้องการค่าที่ซ้ำกันก็ต้องการข้อมูลที่ไม่ซ้ำเท่านั้น
-
เมื่อเราต้องการใช้ Binary Search Tree แทนตารางแฮช
-
เมื่อไม่มีปัญหากับเวลาในการค้นหาเนื่องจากต้องใช้ความซับซ้อนของบันทึก(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 เป็นคอนเทนเนอร์เชื่อมโยงที่มีชุดข้อมูลที่ไม่เรียงลำดับซึ่งแทรกแบบสุ่ม แต่ละองค์ประกอบอาจเกิดขึ้นเพียงครั้งเดียว ดังนั้นจึงไม่อนุญาตให้ทำซ้ำ ผู้ใช้สามารถสร้างชุดที่ไม่เรียงลำดับได้โดยการแทรกองค์ประกอบในลำดับใดๆ และชุดที่ไม่เรียงลำดับจะส่งคืนข้อมูลในลำดับใดๆ เช่น รูปแบบที่ไม่เรียงลำดับ
สาเหตุหลักที่ทำให้ชุดที่ไม่เรียงลำดับสามารถใช้ได้คือ −
-
เมื่อไม่ต้องการข้อมูลที่จัดเรียง แสดงว่ามีข้อมูลอยู่ในรูปแบบที่ไม่เรียงลำดับ
-
เมื่อไม่ต้องการค่าที่ซ้ำกันก็ต้องการข้อมูลที่ไม่ซ้ำเท่านั้น
-
เมื่อเราต้องการใช้ Hash Table แทน Binary Search Tree
-
เมื่อต้องการการค้นหาที่เร็วขึ้นเนื่องจากต้องใช้ 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