เราจะมาดูกันว่า set, multiset, unordered_set และ unordered_multiset มีความแตกต่างกันอย่างไรใน C++ ให้เราดูคุณสมบัติของพวกมันโดยใช้ตัวอย่าง
ตั้งค่า
คุณสมบัติของเซตมีดังนี้
- จัดเก็บข้อมูลตามลำดับ
- เก็บเฉพาะค่าที่ไม่ซ้ำ
- เราสามารถแทรกหรือลบข้อมูลได้ แต่ไม่สามารถเปลี่ยนแปลงข้อมูลได้
- เราสามารถลบองค์ประกอบได้มากกว่าหนึ่งองค์ประกอบโดยใช้ตัววนซ้ำเริ่มต้นและสิ้นสุด
- เราสามารถสำรวจได้โดยใช้ตัววนซ้ำ
- ชุดดำเนินการโดยใช้แผนผังการค้นหาแบบไบนารี
เรามาดูตัวอย่างกัน
ตัวอย่าง
#include <iostream> #include <set> using namespace std; main() { int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41}; set<int> my_set; for(int i = 0; i<15; i++) { my_set.insert(data[i]); } set<int>::iterator it; for(it = my_set.begin(); it != my_set.end(); it++) { cout << "Item: " << *it << endl; } }
ผลลัพธ์
Item: 11 Item: 22 Item: 23 Item: 33 Item: 41 Item: 44 Item: 55 Item: 66 Item: 77 Item: 88 Item: 99
มัลติเซ็ต
คุณสมบัติของเซตมีดังนี้ −
- จัดเก็บข้อมูลตามลำดับ
- อนุญาตให้จัดเก็บข้อมูลที่ซ้ำกัน
- เราสามารถลบองค์ประกอบได้มากกว่าหนึ่งองค์ประกอบโดยใช้ตัววนซ้ำเริ่มต้นและสิ้นสุด
เรามาดูตัวอย่างกัน
ตัวอย่าง
#include <iostream> #include <set> using namespace std; main() { int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41}; multiset<int> my_set; for(int i = 0; i<15; i++) { my_set.insert(data[i]); } multiset<int>::iterator it; for(it = my_set.begin(); it != my_set.end(); it++) { cout << "Item: " << *it << endl; } }
ผลลัพธ์
Item: 11 Item: 11 Item: 22 Item: 22 Item: 23 Item: 33 Item: 41 Item: 44 Item: 55 Item: 66 Item: 66 Item: 66 Item: 77 Item: 88 Item: 99
ชุดไม่เรียงลำดับ
คุณสมบัติของเซตมีดังนี้ −
- ข้อมูลสามารถวางในลำดับใดก็ได้
- ข้อมูลที่ซ้ำกันจะถูกยกเลิก
- ชุดนี้สร้างขึ้นโดยใช้ Hash-tables
- เราสามารถลบได้เพียงองค์ประกอบเดียว โดยที่ตัววนซ้ำชี้อยู่
เรามาดูตัวอย่างกัน
ตัวอย่าง
#include <iostream> #include <unordered_set> using namespace std; main() { int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41}; unordered_set<int> my_set; for(int i = 0; i<15; i++) { my_set.insert(data[i]); } unordered_set<int>::iterator it; for(it = my_set.begin(); it != my_set.end(); it++) { cout << "Item: " << *it << endl; } }
ผลลัพธ์
Item: 11 Item: 55 Item: 22 Item: 66 Item: 33 Item: 44 Item: 77 Item: 88 Item: 99 Item: 23 Item: 41
มัลติเซ็ตแบบไม่เรียงลำดับ
คุณสมบัติของเซตมีดังนี้ −
- ข้อมูลสามารถวางในลำดับใดก็ได้
- อนุญาตให้ใช้ข้อมูลซ้ำกันได้
- ชุดนี้สร้างขึ้นโดยใช้ Hash-tables
- เราสามารถลบได้เพียงองค์ประกอบเดียว โดยที่ตัววนซ้ำกำลังชี้อยู่
เรามาดูตัวอย่างกัน
ตัวอย่าง
#include <iostream> #include <unordered_set> using namespace std; main() { int data[15] = {11, 55, 22, 66, 33, 22, 11, 44, 77, 88, 66, 99, 66, 23, 41}; unordered_multiset<int> my_set; for(int i = 0; i<15; i++) { my_set.insert(data[i]); } unordered_multiset<int>::iterator it; for(it = my_set.begin(); it != my_set.end(); it++) { cout << "Item: " << *it << endl; } }
ผลลัพธ์
Item: 11 Item: 55 Item: 22 Item: 66 Item: 33 Item: 22 Item: 11 Item: 44 Item: 77 Item: 88 Item: 66 Item: 99 Item: 66 Item: 23 Item: 41