参考资料:http://www.cplusplus.com/reference/set/set/
参考资料:http://classfoo.com/ccby/article/oC7Qu
一,常用API
1,构造函数
std::set<int> first;
int myints[]= {10,20,30,40,50};
std::set<int> second (myints,myints+5);
std::set<int> third (second);
std::set<int> fourth (second.begin(), second.end());
struct classcomp {
bool operator() (const int& lhs, const int& rhs) const
{return lhs<rhs;}
};
std::set<int,classcomp> fifth;
bool fncomp (int lhs, int rhs) {return lhs<rhs;}
bool(*fn_pt)(int,int) = fncomp;
std::set<int,bool(*)(int,int)> sixth (fn_pt);
2,迭代器
【begin, end】【cbegin,cend】 set<int>::iterator it;set<int>::const_iterator it
【rbegin,rend】【crbegin, crend】 set<int>::reverse_iterator rit; set<int>::const_reverse_iterator rit
【lower_bound】返回指向容器中第一个值等于给定搜索值或在给定搜索值之后的元素的迭代器itlow=myset.lower_bound (30);
【upper_bound】返回指向容器中第一个值在给定搜索值之后的元素的迭代器itup=myset.upper_bound (60); myset.earse(itlow, itup) [itlow, itup)
3,删除操作
【clear】清除集合里的所有元素,使长度为0 myset.clear()
【erase】从集合中删除指定元素,或者指定范围的元素 myset.erase(iterator) myset.erase(value) myset.erase(iterator_start, iterator_end)
4,查找操作
【count】判断指定元素是否在set中存在,若存在返回1,不存在返回0 myset.count(value)
【find】 查找指定元素,若存在返回指向该元素的迭代器,否则指向set::end myset.find(value)
5,插入操作
【emplace】按指定顺序插入指定元素,若set中不存在该元素才进行插入; auto ret = myset.emplace("foo"); if(!ret.second) {"exists this data"}
返回一个二元组(Pair)。成员 pair::first 被设置为指向新插入元素的迭代器或指向等值的已经存在的元素的迭代器。
成员 pair::second 是一个 bool 值,如果新的元素被插入,返回 true,如果等值元素已经存在(即无新元素插入),则返回 false。
PS:gcc版本需在4.8.0+,否则不支持
【emplace_hint】若指定元素的值是唯一的(当前容器中不存在该元素),则通过暗示可能的插入位置来插入该元素 myset.emplace_hint(iterator_position, value)
PS:position 中的值被用来作为对插入点的暗示。需要注意的是这仅仅只是一个暗示, 而不会强制新的元素插入到某个位置。
新的元素仍然是按由容器中的比较对象指定的严格弱序规则插入到容器中的对应处置,
但是函数可以直接从暗示位置处开始搜索插入点。如果 position 就是插入点,或者靠近插入点,将会很大程度上优化插入操作。
返回:如果当前函数成功插入一个元素(即容器中还未存在值与将要插入的元素的值等价的元素),将会返回指向新插入元素的迭代器。
否则,返回指向容器中值与将要插入的元素的值等价的元素的迭代器。成员类型 iterator,是一个指向元素的双向迭代器类型(支持访问,++, --操作)。
【equal_range】返回值匹配给定搜索值的元素组成的范围。pair<set<int>::iterator,set<int>::iterator> it; it = foo1.equal_range(6);
若集合中指定元素存在,则it->first指向该值, it->second指向该值的下一个元素
若集合中指定元素不存在,则it->first,it->second首尾两个迭代器都将指向按内部比较对象的排序规则排在 val 之后的第一个元素
因为 set 容器中所有元素都是唯一的,所以返回的范围中最多只有一个元素。
返回二元组,二元组由两个指向容器中元素的迭代器组成,第一个迭代器与 set::lower_bound 传入 val 返回的迭代器相同,第二个迭代器与 set::upper_bound 传入 val 返回的迭代器相同。
【insert】 指定位置插入元素
std::pair<std::set<int>::iterator,bool> ret=myset.insert(value) 若存在该元素,ret.first指向set中存在的元素,ret.second为false;若存在,ret.second为true
myset.insert(iterator, value) 在指定位置插入元素,也只是个暗示位置
int myints[]= {5,10,15}; myset.insert (myints,myints+3); 插入数组中指定范围的元素
6,存储大小相关操作
【empty】判断set是否为空,空返回true,否则返回false myset.empty()
【size】集合里的实际包含的元素个数
【max_size】集合最大能容纳的元素个数
7,比较操作
【key_comp】返回容器中用来比较主键(Key)的比较对象(Comparison object)的一份拷贝。默认地,这是一个 std::less 对象,类似操作符 operator<。
它以两个元素的主键为参数,如果在按其定义的严格弱序排序规则排序的序列中,第一个参数排在第二个参数前,返回 true,否则返回 false。
PS:std::set<int>::key_compare mycomp = myset.key_comp(); mycomp(value1,value2)
【value_comp】 同key_comp
8,交换操作
【swap】 交换两个集合的元素 myset1.swap(myset2)