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
广告