【学习笔记】 关于 Set 和 Multiset

来源:互联网 发布:软件到期时间破解 编辑:程序博客网 时间:2024/06/15 19:50

首先要使用他们  先要包括:

#include <set>

Set和Multiset会根据特定的排序准则将插入其中的元素排序,区别是Set不允许重复元素,Multiset允许。


他们的定义在头文件中的是这样的:

template< typename _Key,                                //数据类型          typename _Compare = std::less<_Key>,          // 排序方法  默认是以 < 排序          typename _Allocator = std::allocator<_Key>    //内存定义模型(默认就好 现在还没发觉有什么用)          >;

他们通常以平衡二叉树的形式存储数据,这样操作的时间就会减少一点,但这样就造成了加入到这之中的元素加入之后就再不能修改元素值,想要改变值只能删除旧的,加入新的。

但这不是我们所关心的。

重点是怎么用!!!

以下事例都以整型为例,Set和Multiset是一样的,我们用Set举例。

1、构造与析构

set <int> s;      //产生一个空的set,不含任何元素set <int> s (op)   //产生一个空的set,以op为排序准则,不含任何元素set <int> s1 (s2)   //产生set s1,是s2的副本set <int> s(beg,end)//产生set s,将迭代器beg到end的元素插入s~set();             //销毁s


2、非变动性操作

对于Set和Multiset来说  '==','!=','<','>','<=','>='是可以用的

s.size()  //返回容器的大小,整型值s.empty() //判断容器是否为空

3、搜寻函数

自带的搜寻函数效率非常高,都是对数级别的。

s.count(elem)           //返回元素值为“elem”的元素的个数s.find(elem)            //返回元素值为“elem”的第一个元素的迭代器,如果没找到返回end();s.lower_bound(elem)     //返回元素的第一个可安插位置     返回的是迭代器s.upper_bound(elem)     //返回元素的最后一个可安插位置   返回的是迭代器s.equal_range(elem)     //返回元素的可安插区间   pair类型

4、操作函数

s.begin()           //返回一个迭代器,指向第一个元素s.end()             //返回一个迭代器,指向最后一个元素的下一个位置s.insert(p,elem)    //在位置p之后搜索插入一个元素elem,返回新元素位置,p可以没有s.insert(beg,end)   //将区间beg到end的所有元素插入到s,s.erase(elem)       //移除s中所有与elem相等的元素,返回移除的元素个数s.erase(p)          //移除p指向的元素s.erase(beg,end)    //移除beg到end之间的所有元素s.clear()           //清空s


原创粉丝点击