stl中的一点常规用法

一、set

很多童鞋喜欢用set,它不但能给数据排序,还能去重复,即一个数据只能出现一次(多次保存只会留一份)。内部的原理是红黑树。

红黑树是一种自平衡二叉查找树, 它可以在O(log n)时间内做查找,插入和删除。

同其他需要排序的数据类型一样,为一个结构体的set,需要重载小于号。如果set<>中放的是int,char,float,double,short等简单数据类型,不需要重载<操作符。

struct node {
    int i;
    int j;
};

set<node> s;
bool operator <(const node &a, const node &b) {
     if (a.i > b.i)
        return false;
    else if (a.j > b.j)
        return false;
    return ture;
};

常规几个函数:

1.insert()

insert(x)可以将x插入set容器中,并且会自动排序(递增顺序)和去重;在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效。

返回插入地址的迭代器和是否插入成功的bool并成的pair,时间复杂度为O(log n)

 

2.find()

find(value)返回set中对应值为value的迭代器:

若不存在,返回set.end(),时间复杂度为O(log n)

3.erase()

删除单个元素或者删除一个区间内的所有元素:

参数可以是元素或者迭代器,返回下一个元素的迭代器,时间复杂度为O(log n)

4.size()

返回set内元素的个数,一个整形变量,表示set中元素个数,时间复杂度O(1)

5.clear()

清空set中所有的元素,无返回值

6.empty()

检查set是否为空,返回一个bool型变量,1表示set为空,否则为非空,时间复杂度O(1)

7. lower_bound(x)/upper_bound(x)

lower_bound(x)表示查找>=x的元素中最小的一个,并返回指向该元素的迭代器

upper_bound(x)表示查找>x的元素中最小的一个,并返回指向该元素的迭代器

posted @ 2019-10-12 14:29  超龄码农  阅读(169)  评论(0编辑  收藏  举报