C++中set, multiset, unordered_set, unordered_multiset的区别

在 C++ 标准模板库中:setmultisetunordered_setunordered_multiset 用于存储元素。 尽管它们相似,但在某些功能上彼此不同。下面讨论它们的区别:

1、集合/set:它们是关联容器,按照特定顺序存储唯一元素。 以下是集合的属性:

  • 按排序顺序存储值。
  • 仅存储唯一值。
  • 元素只能插入或删除,但不能修改。
  • 可以通过给出开始迭代器和结束迭代器的位置来擦除超过 1 个元素。
  • 使用迭代器进行遍历。
  • 集合被实现为二叉搜索树。

语法

set<datatype> setname; 

下面的例子演示了set的应用:

// CPP program to demonstrate insert and // delete in set #include <bits/stdc++.h> using namespace std;  // Driver code int main() {     // set declare     set<int> s;      // Elements added to set     s.insert(12);     s.insert(10);     s.insert(2);     // duplicate added     s.insert(10);     s.insert(90);     s.insert(85);     s.insert(45);      // Iterator declared to traverse     // set elements     set<int>::iterator it, it1, it2;     cout << "Set elements after sort and removing duplicates:";     for (it = s.begin(); it != s.end(); it++)         cout << *it << ' ';     cout << 'n';      it1 = s.find(10);     it2 = s.find(90);      // elements from 10 to elements before     // 90 erased     s.erase(it1, it2);     cout << "Set Elements after erase:";     for (it = s.begin(); it != s.end(); it++)         cout << *it << ' ';      return 0; } 

运行结果如下:

Set elements after sort and removing duplicates: 2 10 12 45 85 90  Set Elements after erase: 2 90 

2、multiset: 它们是关联容器,存储多个元素,这些元素按照特定的顺序具有等效值。 以下是多集的属性:

  • 按排序顺序存储元素。
  • multiset允许存储多个元素。
  • 可以通过给出开始迭代器和结束迭代器来擦除超过 1 个元素。

注意:所有其他属性都与集合类似。

语法:

multiset<datatype> multisetName; 

下面的例子演示了 multiset 的应用 –

// CPP program to demonstrate insert and // delete in set #include <bits/stdc++.h> using namespace std;  // Driver Code int main() {     // multiset declare     multiset<int> s;      // Elements added to set     s.insert(12);     s.insert(10);     s.insert(2);     // duplicate added     s.insert(10);     s.insert(90);     s.insert(85);     s.insert(45);      // Iterator declared to traverse     // set elements     multiset<int>::iterator it, it1, it2;     cout << "Multiset elements after sort";     for (it = s.begin(); it != s.end(); it++)         cout << *it << ' ';     cout << 'n';      it1 = s.find(10);     it2 = s.find(90);      // elements from 10 to elements before 90     // erased     s.erase(it1, it2);      cout << "Multiset Elements after erase:";     for (it = s.begin(); it != s.end(); it++)         cout << *it << ' ';      return 0; } 

输出结果:

Multiset elements after sort 2 10 10 12 45 85 90  Multiset Elements after erase: 2 90 

3、unordered_set:它们是关联容器,以无特定顺序存储唯一元素。 以下是 unordered_sets 的属性:

  • 元素可以按任何顺序存储(没有排序的顺序)。
  • 仅存储唯一值。
  • 用于存储元素的哈希表。
  • 只能擦除给定迭代器位置的元素。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264179.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论