set(应用详解)

定义一个set类型

set<类型> a;

例如:set<int> a;

set内部红黑树,自动排序,默认从小到大

set<int,greater<int>>a;使set内从大大小排序。

multiset<类型> a;multiset与set不同的是前者允许有重复元素。

插入一个数:a.insert(x)

求长度:len=a.size()

a.begin() //返回set容器的第一个元素的地址

a.end() //返回set容器的最后一个元素的地址

a.erase(10); //删除值为10的元素

a.clear();  //删除所有元素

a.empty() //判断set容器是否为空

a.count(10) //查找10这个元素是否存在,因为set内不存在重复的数,存在返回1,不存在返回0

a.find(10) //查找value的位置,找到了返回该值value的迭代器,没找到则返回a.end()

 

set还有一个重要的应用是(二分)

配合upper_bound和lower_bound使用

有很多坑点感觉

set<int>::iterator it;

就像定义了一个指针,set不能像访问数组那样通过下标访问

it=a.begin()

此时it指向了set的第一个元素

输出:cout << *it

it=a.end()

it指向了set的最后一个元素的后一个地址

比如set:1、2、3、4、5

it=a.end()指向了5后面的地址,但输出是也会输出5

it--后再输出还是5

最后是二分函数的使用:

it=a.lower_bound(x);

it=a.upper_bound(y);

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注