C++ 中 set、multiset、unordered_set 和 unordered_multiset 的區別
在這裡,我們將瞭解 C++ 中 set、multiset、unordered_set 和 unordered_multiset 的區別。讓我們透過一些示例來了解它們的特性。
Set
set 的特性如下:
- 按排序順序儲存資料
- 僅儲存唯一值
- 可以插入或刪除資料,但不能更改資料
- 可以使用起始和結束迭代器刪除多個元素
- 可以使用迭代器遍歷
- set 使用二叉搜尋樹實現
現在讓我們來看一個例子
示例
#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
Multiset
multiset 的特性如下:
- 按排序順序儲存資料
- 允許儲存重複資料
- 可以使用起始和結束迭代器刪除多個元素。
現在讓我們來看一個例子。
示例
#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
Unordered Set
multiset 的特性如下:
- 資料可以按任意順序放置
- 重複資料將被丟棄
- 此 set 使用雜湊表建立
- 我們只能刪除迭代器指向的單個元素
現在讓我們來看一個例子。
示例
#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
Unordered Multiset
multiset 的特性如下:
- 資料可以按任意順序放置
- 允許重複資料
- 此 set 使用雜湊表建立
- 我們只能刪除迭代器指向的單個元素
現在讓我們來看一個例子。
示例
#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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP