java set的头文件_C++ STL常用知识

模板(各种类型通用):

template

注意:若要使用模板,在每个自定义函数前都必须加上此定义。

排序(algorithm头文件):

sort(头指针l,尾指针r):(void)将左闭右开区间[l,r)中的元素从小到大排序。时间复杂度O(nlogn)。

sort(头指针l,尾指针r,自定义比较函数cmp):(void)将左闭右开区间[l,r)中的元素按自定义比较顺序排序。时间复杂度O(nlogn)。

检索(algorithm头文件):

lower_bound(头指针l,尾指针r,指定元素x):(iterator)在一个已经升序排序好的左闭右开区间[l,r)中返回第一个大于或等于x的位置指针;若所有元素都小于x,则返回尾指针r。时间复杂度O(logn)。

upper_bound(头指针l,尾指针r,指定元素x):(iterator)在一个已经升序排序好的左闭右开区间[l,r)中返回第一个大于x的位置指针;若所有元素都小于或等于x,则返回尾指针r。时间复杂度O(logn)。

去重(algorithm头文件):

unique(头指针l,尾指针r):(iterator)在一个已经有序的左闭右开区间[l,r)中将不重复的所有元素按照原来的顺序堆积在区间内左侧,并覆盖掉原来的元素,其后的元素保持不变。返回去重后的最后一个元素所在位置的后一个位置指针。

不定长数组:vector变量名(vector头文件):

.size():(unsigned long long)返回数组元素个数。

.begin():(iterator)返回数组首位置(vector中元素在内存中连续存储)。

.end():(iterator)返回数组尾位置的下一个位置(vector中元素在内存中连续存储)。

.resize(指定大小n):(void)改变数组大小为n,留下前n个元素,后面的元素截断舍弃;若n大于数组原大小,则在数组末尾加入未初始化的元素直到大小为n为止。

.push_back(元素x):(void)在数组末尾添加x。

.pop_back():(void)如果数组中还有元素,删除数组最后一个元素。

.clear():(void)清空数组。

.empty():(bool)返回数组是否为空。

vector变量名a(长度n):(void)将数组a的长度初始化为n。

vector变量名a(长度n,值v):(void)将数组a的长度初始化为n,每个元素的值初始化为v。

集合1(不可重):set变量名

集合2(可重):multiset变量名

(set头文件):

.insert(元素x):(void)在集合中添加元素x(set只添加一次)。时间复杂度O(logn)。

.size():(unsigned long long):返回集合所有元素的个数。

.count(元素x):(unsigned long long)返回集合中元素x的个数。时间复杂度O(logn)。

.erase(元素x):(unsigned long long)返回集合中元素x的个数,若有,顺便将其全部删除。时间复杂度O(logn)。

.erase(迭代器it):(void)删除迭代器it所指向的元素。时间复杂度O(logn)。

.erase(头指针l,尾指针r):(void)删除集合中左闭右开区间[l,r)中的元素(集合中元素已经从小到大排好序,但非连续存储)。

.clear():(void)清空集合。

.empty():(bool)返回集合是否为空。

.lower_bound(指定元素x):(iterator)作用同上(集合中元素已经从小到大排好序,但非连续存储)。

.upper_bound(指定元素x):(iterator)作用同上(集合中元素已经从小到大排好序,但非连续存储)。

.begin():(iterator)返回集合首位置(集合中元素已经从小到大排好序,但非连续存储)。

.end():(iterator)返回集合尾位置的下一个位置(集合中元素已经从小到大排好序,但非连续存储)。

.find(指定元素x):(iterator)返回第一次在集合中出现的元素x所在的位置,若元素x不存在,则返回end迭代器。

set_union(集合A的头指针,集合A的尾指针,集合B的头指针,集合B的尾指针,inserter(集合C,集合C的头指针)):(void)将集合A与B的“并集”存放入集合C中(对于每一个元素x,C.count(x)==max(A.count(x),B.count(x)))。

set_intersection(集合A的头指针,集合A的尾指针,集合B的头指针,集合B的尾指针,inserter(集合C,集合C的头指针)):(void)将集合A与B的“交集”存放入集合C中(对于每一个元素x,C.count(x)==min(A.count(x),B.count(x)))。

映射:map变量名(map头文件):

.clear():(void)清空所有的键和值。

.count(元素x):(bool)返回x是否在键中。时间复杂度O(logn)。

.erase(元素x):(bool)返回键中是否有x,若有,顺便将其及其对应的值删除。时间复杂度O(logn)。

.erase(头指针l,尾指针r):(void)删除映射中按键排列的左闭右开区间[l,r)中的键和值(map已经按键的值从小到大排好序,但非连续存储)。

.empty():(bool)返回键和值是否为空。

.lower_bound(指定键x):(iterator)作用同上(map已经按键的值从小到大排好序,但非连续存储)。

.upper_bound(指定键x):(iterator)作用同上(map已经按键的值从小到大排好序,但非连续存储)。

.begin():(iterator)作用同上(map已经按键的值从小到大排好序,但非连续存储)。

.end():(iterator)作用同上(map已经按键的值从小到大排好序,但非连续存储)。

栈:stack变量名(stack头文件):

.push(元素x):(void)将x入栈。

.pop():(void)如果还有元素,将最顶元素弹出栈。

.top():(元素类型)如果还有元素,返回栈顶元素(不删除)。

.empty():(bool)返回栈是否为空。

队列:queue变量名(queue头文件):

.push(元素x):(void)将x加入队尾。

.pop():(void)如果还有元素,将队首元素出队。

.front():(元素类型)如果还有元素,返回队首元素(不删除)。

.empty():(bool)返回队列是否为空。

双端队列:deque变量名(queue头文件):

.size():(unsigned long long)返回队列元素个数。

.resize(指定长度n):(void)改变队列长度为n,留下前n个元素,后面的元素截断舍弃;若n大于队列原大小,则在队列末尾加入未初始化的元素直到大小为n为止。

.front():(元素类型)如果还有元素,返回队首元素(不删除)。

.back():(元素类型)如果还有元素,返回队尾元素(不删除)。

.push_front(元素x):(void)在队列前端添加x。

.pop_front():(void)如果队列中还有元素,删除队列最前一个元素。

.push_back(元素x):(void)在队列末尾添加x。

.pop_back():(void)如果队列中还有元素,删除队列最后一个元素。

.clear():(void)清空队列。

.empty():(bool)返回队列是否为空。

优先队列1:priority_queue变量名;

越大的元素优先级越高。

优先队列2:priority_queue,greater >变量名;

越小的元素优先级越高。

优先队列3:priority_queue,自定义比较结构体(结构体内用bool重载括号操作符“()”且带有两个参数)cmp>变量名;

自定义优先级设定方法。

(queue头文件):

.push(元素x):(void)将x加入优先队列。

.pop():(void)如果还有元素,将优先级最高的元素出队。

.top():(元素类型)如果还有元素,返回优先级最高元素(不删除)。

.empty():(bool)返回优先队列是否为空。

bitset(bitset头文件)

bitset变量名:声明一个含有n位二进制数的bitset,默认其全部位为零。

bitset变量名(数值v):声明一个含有n位二进制数的bitset,其二进制值等于v。

bitset变量名(string(“字符串s”)):声明一个含有n位二进制数的bitset,其二进制值为s所表示的二进制数(s中的低位字符对应bitset中的高位)。

.any():(bool)返回bitset中是否含1。

.none():(bool)返回bitset中是否全为0。

.count():(unsigned long long)返回bitset中有几个1。

[pos]:访问第pos位(类似于数组,bitset位数从0编号)。

.set():(unsigned long long)将bitset所有位设为1。

.reset():(unsigned long long)将bitset所有位设为0。

.flip():(unsigned long long)将bitset所有位取反。

bitset也可以进行位运算,原则和整数一致,返回一个同等长度的bitset。

原文:https://www.cnblogs.com/AndyGamma/p/9595002.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值