1. set
(i)按排序顺序存储值。
(ii)仅存储唯一值。
(iii)元素只能插入或删除, 而不能修改。
(iv)我们可以通过指定开始迭代器和结束迭代器的位置来擦除1个以上的元素。
(v)使用迭代器遍历。
(vi)集被实现为二叉搜索树.
//CPP program to demonstrate insert and
//delete in set
#include <
bits/stdc++.h>
using namespace std;
int main()
{
//set declare
set<
int>
s;
//Elements added to set
s.insert(12);
s.insert(10);
s.insert(2);
s.insert(10);
//duplicate added
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:\n" ;
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:\n" ;
for (it = s.begin();
it != s.end();
it++)
cout <
<
*it <
<
' ' ;
return 0;
}
OUTPUT:
Set elements after sort and removing duplicates:
2 10 12 45 85 90
Set Elements after erase:
2 90
2.multiset
(i)按排序顺序存储元素。
(ii)它允许存储多个元素。
(iii)我们可以通过指定start迭代器和end迭代器来擦除1个以上的元素。
注意:-所有其他属性与set相似。
//CPP program to demonstrate insert and
//delete in set
#include <
bits/stdc++.h>
using namespace std;
int main()
{
//multiset declare
multiset<
int>
s;
//Elements added to set
s.insert(12);
s.insert(10);
s.insert(2);
s.insert(10);
//duplicate added
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\n" ;
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:\n" ;
for (it = s.begin();
it != s.end();
it++)
cout <
<
*it <
<
' ' ;
return 0;
}
OUTPUT:
Multiset elements after sort
2 10 10 12 45 85 90
Multiset Elements after erase:
2 90
3.unordered_set
(i)元素可以任何顺序存储。 (无排序顺序)
(ii)仅存储唯一值。
(iii)用于存储元素的哈希表。
(iv)我们只能删除给出迭代器位置的元素。
注意:-所有其他属性与set相似。
//CPP program to demonstrate insert and
//delete in unordered_set
#include <
bits/stdc++.h>
using namespace std;
int main()
{
//unordered_set declare
unordered_set<
int>
s;
//Elements added to set
s.insert(12);
s.insert(10);
s.insert(2);
s.insert(10);
//duplicate added
s.insert(90);
s.insert(85);
s.insert(45);
s.insert(12);
s.insert(70);
//Iterator declared to traverse
//set elements
unordered_set<
int>
::iterator it, it1;
cout <
<
"Unordered_set elements after sort:\n" ;
for (it = s.begin();
it != s.end();
it++)
cout <
<
*it <
<
' ' ;
cout <
<
'\n' ;
it1 = s.find(10);
//element 10 erased
s.erase(it1);
cout <
<
"Unoredered_set Elements after erase:\n" ;
for (it = s.begin();
it != s.end();
it++)
cout <
<
*it <
<
' ' ;
return 0;
}
OUTPUT:
Unordered_set elements after sort:
70 85 45 12 10 2 90
Unoredered_set Elements after erase:
70 85 45 12 2 90
4.Unordered_multiset
(i)元素可以任何顺序存储。
(ii)可以存储重复的元素。
(iii)用于存储元素的哈希表。
(iv)我们只能删除给出迭代器位置的元素。
注意:-所有其他属性与set相似。
//CPP program to demonstrate insert and
//delete in unordered_multiset
#include <
bits/stdc++.h>
using namespace std;
int main()
{
//unordered_multiset declare
unordered_multiset<
int>
s;
//Elements added to set
s.insert(12);
s.insert(10);
s.insert(2);
s.insert(10);
//duplicate added
s.insert(90);
s.insert(85);
s.insert(45);
//Iterator declared to traverse
//set elements
unordered_multiset<
int>
::iterator it, it1;
cout <
<
"Unordered-Multiset elements after sort:\n" ;
for (it = s.begin();
it != s.end();
it++)
cout <
<
*it <
<
' ' ;
cout <
<
'\n' ;
it1 = s.find(10);
//element 10 trained
s.erase(it1);
cout <
<
"Unordered-Multiset Elements after "
"erase:\n" ;
for (it = s.begin();
it != s.end();
it++)
cout <
<
*it <
<
' ' ;
return 0;
}
OUTPUT:
Unordered-Multiset elements after sort:
85 45 12 90 2 10 10
Unordered-Multiset Elements after erase:
85 45 12 90 2 10
结论:
简而言之,set是一个存储已排序和唯一元素的容器。如果添加了unordered,则意味着元素没有排序。如果添加了multiset,则意味着允许重复的元素存储。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
【set,multiset,unordered_set,unordered_multiset之间的差异】被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C++ STL通过激烈的问题解决过程来训练和掌握这些概念。
推荐阅读
- JDK、JRE和JVM之间有什么区别()
- 虚拟电路和数据报网络之间有什么差异()
- IPv4和IPv6之间有什么区别()
- Java中HashMap和HashTable之间有什么区别()
- C语言中的指针和数组之间有什么区别()
- 算法题(求两个大数的差)
- 算法题(m个元素的两个子集之间的最大差)
- 反向索引与正向索引之间的差异
- C/C++中的int main()和int main(void)之间的区别()