set
所有元素都会在插入时自动被排序
set/multiset属于关联式容器,底层结构是用二叉树实现
set和multiset区别:
set不允许容器中有重复元素
multiset允许
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);
#include <iostream>
using namespace std;
#include <set>
void print(set<int> &s)
{
for(set<int>::iterator it=s.begin();it!=s.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
set<int> s;
s.insert(20);
s.insert(40);
s.insert(1);
s.insert(2);
print(s);
//1 2 20 40
}
int main()
{
test01();
return 0;
}
5.查找和统计:
find(key); //查找key是否存在,存在返回该键的迭代器 若不存在,返回set.end()
count(key); //对于set而言,统计结果要么是0 要么是1 (set中无重复元素)
6.set和multiset区别:
set插入数据时会返回插入结果,表示是否插入成功
multiset不会检测数据,因此可以插入重复数据
#include <iostream>
using namespace std;
#include <set>
void test01()
{
set<int> s;
//set.insert(elem) 返回一个pair类型
//pair类型第一位置是一个迭代器,第二个位置是一个bool数据类型
pair<set<int>::iterator, bool> ret=s.insert(10);//插入成功返回True 插入失败返回False)
if(ret.second){
cout<<"插入成功"<<endl;
}else{
cout<<"插入失败"<<endl;
}
//插入成功
ret=s.insert(10);
if(ret.second){
cout<<"插入成功"<<endl;
}else{
cout<<"插入失败"<<endl;
}
//插入失败
multiset<int>ms;
ms.insert(10);
ms.insert(10);
for(multiset<int>::iterator i=ms.begin();i!=ms.end();i++){
cout<<*i<<" ";
}
//10 10
}
int main()
{
test01();
return 0;
}