ในบทความนี้ ให้เราทำความเข้าใจว่าอะไรคือ 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