Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

set vs unordered_set ใน C ++ STL(3)


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