STL:set(multiset)
2013-04-25 17:56
295 查看
和所有关联式容器类似,通常使用平衡二叉树完成。事实上,set和multiset通常以红黑树实作而成
set不允许重复单元,而multiset允许。
构造函数和析构函数
set的形式可以是:
以template参数定义:
set<int,greater<int>> col1;
主要函数:
insert(type T);
find(type T); //return值为set<type>::iterator p
size();
count();
begin();
end();
set提供的插入函数:
multiset提供的插入函数:
返回值型别不同的原因是set不允许元素重复,而multiset允许。当插入的元素在set中已经包含有同样值的元素时,插入就会失败。所以set的返回值型别是由pair组织起来的两个值:
第一个元素返回新元素的位置,或返回现存的同值元素的位置。第二个元素表示插入是否成功。
set的第二个insert函数,如果插入失败,就只返回重复元素的位置!
示例如下:
还有个函数也非常重要:
这个在window下弄了很久,总是出错。大概是这么个情况。
执行s1.erase(p)后p变为一个垃圾负数,然后就bug了。。。但linux就不一样了。再次鄙视WIN
set不允许重复单元,而multiset允许。
构造函数和析构函数
set的形式可以是:
以template参数定义:
set<int,greater<int>> col1;
主要函数:
insert(type T);
find(type T); //return值为set<type>::iterator p
size();
count();
begin();
end();
set提供的插入函数:
pair<iterator,bool> insert(const value_type& elem); iterator insert(iterator pos_hint, const value_type& elem);
multiset提供的插入函数:
iterator insert(const value_type& elem); iterator insert(iterator pos_hint, const value_type& elem);
返回值型别不同的原因是set不允许元素重复,而multiset允许。当插入的元素在set中已经包含有同样值的元素时,插入就会失败。所以set的返回值型别是由pair组织起来的两个值:
第一个元素返回新元素的位置,或返回现存的同值元素的位置。第二个元素表示插入是否成功。
set的第二个insert函数,如果插入失败,就只返回重复元素的位置!
示例如下:
#include <iostream> #include <set> using namespace std; int main() { typedef set<int,greater<int> > IntSet; IntSet s1; s1.insert(4); s1.insert(3); s1.insert(5); s1.insert(1); s1.insert(6); s1.insert(2); s1.insert(5); //the inserted element that has the same value with a element existed is emitted copy(s1.begin(),s1.end(),ostream_iterator<int>(cout," ")); cout << endl << endl; pair<IntSet::iterator,bool> status = s1.insert(4); if(status.second) cout << "4 is inserted as element " << distance(s1.begin(),status.first) + 1 << endl; else cout << "4 already exists in s1" << endl; copy(s1.begin(),s1.end(),ostream_iterator<int>(cout," ")); cout << endl << endl; set<int> s2(s1.begin(),s1.end());//default sort criterion is less< copy(s2.begin(),s2.end(),ostream_iterator<int>(cout," ")); cout << endl << endl; }
还有个函数也非常重要:
iterator erase(iterator pos); iterator erase(iterator beg, iterator end);
这个在window下弄了很久,总是出错。大概是这么个情况。
p = s1.begin(); while(p!=s1.end()) { s1.erase(p); p++; }
执行s1.erase(p)后p变为一个垃圾负数,然后就bug了。。。但linux就不一样了。再次鄙视WIN
相关文章推荐
- STL的基本使用之关联容器:set和multiSet的基本使用
- STL中 set 和 multiset
- 今日学习札记——STL常用容器:vector、list、set和multiset、map和multimap(11.17)
- 转自http://blog.sina.com.cn/daylive——C++ STL set&multiset
- STL概览-关联容器set,multiset,map,multimap
- STL有4种联合容器(set,multiset, map, multimap)
- STL容器:set/map/multiset/multimap 与hash_set/hash_map/hash_multiset/hash_multimap
- STL容器之set/multiset
- STL中的set和multiset使用(一)_boolan(博览网)_第三门课_第一周_作业
- STL中的set和multiset学习小记
- STL之set&multiset使用简介
- STL之set和multiset总结
- STL 简单 set 和 multiset 的实现
- STL中set与multiset的区别
- STL set and multiset
- c++的stl中的set/multiset
- STL之五:set/multiset用法详解
- STL-------set与multiset
- 【C++ STL】Set和Multiset
- set和multiset使用方法 (STL)