set,multiset
集合,set会自动过滤掉重复的元素,multiset则允许有重复的元素,set一般用于元素多,且经常需要插入,删除数据时的场景。set中的元素默认按升序排列
声明和初始化方式
set<T> s;
set<T> s(s1);
set<T> s=s1;
set<T> s={a1,a2,a3,...}
set<T> s(contain.begin(),contain.end())
set,multiset的相关操作
insert(val) //插入元素
insert(iterator1,iterator2) //擦汗如迭代器范围内的数据
find(val) //查找元素 返回一个迭代器
count(val) //统计元素个数
erase(val) //删除元素
erase(iterator1,iterator2)
学习代码
#include <iostream>
#include <set>
using namespace std;
template <typename Container>
void PrintContents(const Container &c); //输出容器中元素的模板函数
int main()
{
set<int> a;
multiset<int> ma;
a.insert(60);
a.insert(-1);
a.insert(3000); //插入的数据自动按升序排序
a.insert(60); //自动过滤掉重复的元素
cout << "显示set里面的数据" << endl;
/*set<int>::const_iterator it = a.begin(); //常迭代器
while (it != a.end())
{
cout << *it << endl;
++it;
}*/
PrintContents(a);
set<int>::const_iterator itf = a.find(-1); //使用find()查找元素,找到后不能修改该处的数据,应为有默认顺序
cout << "找到了" << *itf << endl;
cout << endl;
ma.insert(3000);
ma.insert(a.begin(), a.end());
ma.insert(3000); //允许有重复的元素
cout << ma.count(3000) << endl; //count()计算集合中某个元素的个数,set中为0或1
PrintContents(ma);
//删除3000后的ma
cout << "删除3000后的multiset" << endl;
ma.erase(3000); //会删除所有的相同元素
PrintContents(ma);
getchar();
return 0;
}
template <typename Container>
void PrintContents(const Container &c)
{
Container::const_iterator it = c.begin();
while (it != c.end())
{
cout << *it << endl;
++it;
}
}