集与多集(set/multiset)
v 与基本容器相比, 关联容器更注重快速和高效地检索数据的能力。 这些容器是根据键值 (key) 来检索数据的, 键可以是值也可以是容器中的某一成员。 这一类中的成员在初始化后都是按一定顺序排好序的。
v set和multiset容器类(集和多集):#include
n 内部实现:红黑树
u 插入删除查找复杂度log(n)
u 它其中所包含的元素的值是唯一的(map)
n 允许重复元素
set容器详解:
v 头文件 #include
v 定义变量 setmyset;
v 主要成员函数
n myset.insert(elem) 向集合中插入数据,如果已经存在则不插入
n myset.erase(elem) 删除集合中值等于 elem的元素
n myset.find(elem) 查找值等于elem的元素,若找到返回指向 elem的迭代器,否则返回end(),
n myset.clear() 清除集合中所有数据
n myset.size() 返回集合中数据个数
multiset容器详解:
v 头文件 #include
v 定义变量 multisetmymulset;
v 主要成员函数
n mymulset.insert(elem) 向多重集合中插入数据,
n mymulset.erase(elem) 删除多重集合中值等于 elem的所有元素,若删除成功返回删除个数,否则返回0
n mymulset.count(elem) 返回多重集合中数据elem出现的次数
multiset实例:
#include
#include
#include
using namespace std;
int main()
{
setset1;
for(int i=0;i<10;++i) set1.insert(i);
for(set::iterator p=set1.begin();p!=set1.end();p++)
cout<<*p<<" ";
cout<<endl;
if(set1.insert(3).second) cout<<"set insert success"<<endl;
else cout<<"set insert failed"<<endl;
if(set1.find(3)!=set1.end()){//查找元素3
cout<<"find it.."<<endl;
}
else{
cout<<" not find it.."<<endl;
}
if(set1.find(300)!=set1.end()){//查找元素300
cout<<"find it.."<<endl;
}
else{
cout<<"not find it.."<<endl;
}
int a[]={4,1,1,1,1,1,0,5,1,0};
multiset A;
A.insert(a,a+10);
for(multiset::iterator q=A.begin();q!=A.end();q++)
cout<<*q<<" ";
cout<<endl;
return 0;
}