c++学习笔记(STL,位运算以及常用库函数)(中)

3.#include<deque>

双端队列,就像是vector和queue的结合体,与vector相比,deque在头部增删元素只需要O(1)的时间,与queue相比,deque像数组一样支持随机访问。

3.1声明

   deque<int> a;

    a.begin(),a.end();

    a.front(),a.back();

    a.push_back(1),a.push_front(1);

    a.pop_back(),a.pop_front();

    a.clear();

------------------------------------------------------------------------------------------------------

4.#include<set>

头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素。set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同。

4.1声明

    set<int> s; //元素不能重复

    multiset<int> ms; //元素可以重复

值得一提的set也需要重载一下小于号

4.2基本操作

4.2.1insert

s.insert(x)把一个元素x插入到集合s中,时间复杂度为  O(logn)          //在set中,若元素已存在,则不会重复插入该元素,对集合的状态无影响

4.2.2find

s.find(x)在集合s中查找等于x的元素,并返回指向该元素的迭代器。若不存在,则返回s.end()。时间复杂度为  O(logn) ,所以我们可以运用它来判断x在a中是否存在。

4.2.3 lower bound / upper bound

这两个函数的用法与find类似,但查找的条件略有不同,时间复杂度为 O(logn)

s.lower_bound(x)查找大于等于x的元素中最小的一个,并返回指向该元素的迭代器。

s.upper_bound(x)查找大于x的元素中最小的一个,并返回指向该元素的迭代器。

4.2.4 erase

设it是一个迭代器,s.erase(it)从s中删除迭代器it指向的元素,时间复杂度为 O(logn)

设x是一个元素,s.erase(x)从s中删除所有等于x的元素,时间复杂度为 O(k+logn),其中 k 是被删除的元素个数。

4.2.5 count

a.count(x);会返回x在set中出现的个数,时间复杂度为O(k+logn),k是被删除的个数。

4.3其他操作

Size/empty/clear类似于vector

4.3.1set的迭代器

set和multiset的迭代器称为“双向访问迭代器”,不支持“随机访问”,支持星号*解除引用,仅支持++和--两个与算术相关的操作。

----------------------------------------------------------------------------------------------------------------

5.#include<map>

可以将任何基本类型映射到任何基本类型。如int array[100]事实上就是定义了一个int型到int型的映射。

map提供一对一的数据处理,key-value键值对,其类型可以自己定义,第一个称为关键字,第二个为关键字的值

map内部是自动排序的

5.1声明

   

 map<string, int> m;

    m["a"] = 1;

它的一些使用方法就像上面。

5.2基本使用

Size/empty/clear/begin/end均以set类似

Insert/erase

与set类似,但其参数均是pair<key_type, value_type>。

Find

h.find(x)在变量名为h的map中查找key为x的二元组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值