1)所有元素都会在插入时自动排序
2)本质上属于关联式容器,底层结构是二叉树实现
3)set不允许容器中出现重复的元素
4)multiset允许容器中出现重复的元素
1)默认构造set
2)拷贝构造:set
3)运算符重载拷贝构造:set
##set容器的大小操作和交换操作
1)size();//返回容器中元素的个数
2)empty();//判断容器是否为空
3)cppswap();//交换集合容器
1)插入元素:insert(elem);//在容器中插入元素;
2)清空元素:clear();//清除所有元素
3)删除指定位置的元素:erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器
4)删除区间中的元素:earse(beg,end)//删除区间beg,end的所有元素,返回第一个元素的迭代器;区间一定要设置为迭代器
5)删除容器中值为elem的元素:earse(elem);//删除容器中elem的元素
1)查找元素:find(key);//查找key是否存在,存在返回该元素的迭代器,否则返回end()迭代器
2)统计元素中的个数:count(key);//统计容器中key元素个数
1)set在插入数据的时候会返回一个插入结果类型为pair
2multiset没有插入检测
3)multiset可以重复插入,set不行
例子如下:
因为默认是从小到大排序,从新指定排序规则从大到小;
#include#include using namespace std; class mysort { public: bool operator()(int v1,int v2)const { return v1>v2; } }; int main() { set s; s.insert(1); s.insert(3); s.insert(2); for(set ::iterator it=s.begin();it!=s.end();it++) { cout<<*it< set自定义数据类型的排序 自定义数据类型在插入之前一定要指定排序规则,否则会报错
例子#include#include #include using namespace std; class myclass { public: myclass(string name ,int age); string my_name; int my_age; }; myclass::myclass(string name ,int age):my_name(name),my_age(age) { } class compareclass { public: bool operator()(const myclass &p1,const myclass &p2)const; }; bool compareclass::operator()(const myclass &p1, const myclass &p2)const { return (p1.my_age)>(p2.my_age); } int main() { set s; myclass p0("张三",27); myclass p1("李四",26); myclass p2("王麻子",24); s.insert(p0); s.insert(p1); s.insert(p2); for(set ::iterator it=s.begin();it!=s.end();it++) { cout< my_name< my_age<



