C ++中set,multiset,unordered_set,unordered_multiset之间的差异

在这里,我们将看到C ++中set,multiset,unordered_set和unordered_multiset有什么区别。让我们使用一些示例查看它们的属性。

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

多集

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};
   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

无序集

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

无序多集

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