持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
1 set/ multiset 容器
1.1 set基本概念
简介:
- 所有元素都会在插入时自动被排序
本质:
- set/multiset属于关联式容器,底层结构是用二叉树实现。
1.2 set和multiset区别:
- set不允许容器中有重复的元素
- multiset允许容器中有重复的元素
1.3 set构造和赋值
功能描述:创建set容器以及赋值
构造:
set<T> st;//默认构造函数:set(const set &st);//拷贝构造函数
赋值:
set& operator=(const set &st);//重载等号操作符
1.4 代码示例:
#include <set>
void printSet(set<int> & s)
{
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
//构造和赋值
void test01()
{
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
printSet(s1);
//拷贝构造
set<int>s2(s1);
printSet(s2);
//赋值
set<int>s3;
s3 = s2;
printSet(s3);
}
int main() {
test01();
system("pause");
return 0;
}
1.5 总结:
- set容器插入数据时用insert
- set容器插入数据的数据会自动排序
- 1.构造:
set st;
set(const set &st);
- 2.赋值:
set& operator=(const set &st);
- 3.大小和交换
size();
empty();
swap(st);
4.插入和删除 `insert(elem); clear(); erase(pos); erase(beg,end); erase(elem);
` 5.查找和统计:
find(key); //查找key是否存在,存在返回该键的迭代器 若不存在,返回set.end()
count(key); //对于set而言,统计结果要么是0 要么是1 (set中无重复元素)
6.set和multiset区别: set插入数据时会返回插入结果,表示是否插入成功 multiset不会检测数据,因此可以插入重复数据
7.set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。