set/multiset:是关联容器,由红黑树实现。
一:特点
1.由红 黑树 实现,内部元素自动排序,元素位置和插入次序无关;
2.set容器每个元素仅能出现一次,不允许重复;multiset允许重复元素;
3.插入删除操作不需要内存拷贝和内存移动;
4.修改元素值,是先删除原有元素,然后插入新的元素。
二:定义与初始化
sets;//默认升序 set > s1 = { 1,2,3,4 };//升序{1,2,3,4} set > s2{ 1,2,3,4 };//降序{4,3,2,1} set s3{ 1,2,2,3 };//{1,2,3} multiset s4; multiset >s5 = { 1,2,3,4 }; multiset >s6{ 1,2,3,4 }; multiset s7{ 1,2,2,3 };//{1,2,2,3}
set和multiset操作特性基本一致,区别在于set不允许重复元素,而multiset允许重复元素。
三:基本操作
//查找find: 如果找到查找的元素值,则返回该值的迭代器位置,否则返回集合最后一个元素后一个位置的迭代器,即end(); set::iterator it; it = s1.find(3); if (it != s1.end()) { cout << *it << endl; } else { cout << "not find" << endl; } //插入 s1.insert({ 5,6 }); //删除 s1.erase(1); s1.erase(s1.begin(), s1.begin()++); s1.erase(s1.begin()++);//不支持it+n,仅支持it++ s1.size(); s1.max_size(); //可容纳的最大元素的数量 s1.count(1);//set为0或者1,multiset可大于1 s1.clear();
四:总结
1.时间复杂度:查询,插入,删除都为O(log(n));
2.查找一个元素是否存在于某集合中,唯一存在的情况使用 set,不唯一存在的情况使用 multiset。



