头文件:
总览:
make_heap()
:用于把一个可迭代容器变成一个堆,默认是大顶堆;
push_heap()
:对heap增加一个元素;
pop_heap()
:对heap取出下一个元素;
sort_heap()
:对heap转化为一个已排序群集。
make_heap():
它有三个参数。第一个参数是指向开始元素的迭代器,第二个参数是指向最末尾元素的迭代器,第三个参数是less<>()或是greater<>()
,前者用于生成大顶堆,后者用于生成小顶堆,第三个参数默认情况下为less<>(),less()用于生成大顶堆。
push_heap():
push_heap()
用于把数据插入到堆中,它也有三个参数,其意义与make_heap()
的相同,第三个参数应与make_heap
时的第三个参数保持一致。
注意:在使用push_heap()前,请确保已经把数据通过q.push_back()传入q中,而不是在push_heap()后再使用q.push_back(t)。
pop_heap():
pop_heap()
用于将堆的第零个元素与最后一个元素交换位置,然后针对前n - 1
个元素调用make_heap()
函数,它也有三个参数,参数意义与make_heap()相同
,第三个参数应与make_heap
时的第三个参数保持一致
。
注意:
pop_heap()
函数,只是交换了两个数据的位置,如果需要弹出这个数据,请记得在pop_heap()
后加上q.pop_back()
。如:pop_heap(a.begin(), a.end()); a.pop_back();
。
sort_heap():
sort_heap()
是将堆进行排序,排序后,序列将失去堆的特性(子节点的键值总是小于或大于它的父节点)。它也具有三个参数,参数意义与make_heap()
相同,第三个参数应与make_heap
时的第三个参数保持一致。大顶堆sort_heap()
后是一个递增序列,小顶堆是一个递减序列。
注意:请在使用这个函数前,确定序列符合堆的特性,否则会报错!
总览:
strcmp()
:比较字符串;
substr()
:求子串;
stoi()
:将字符串转换为int
;
to_string()
:将数值类转换为字符串;
queue:
size()
empty()
push()
: 向队尾插入一个元素
front()
: 返回队头元素
back()
: 返回队尾元素
pop()
: 弹出队头元素
priority_queue:
size()
empty()
push()
: 插入一个元素
top()
:返回堆顶元素
pop()
:弹出堆顶元素
定义成小根堆的方式:priority_queue
size()
empty()
clear()
front()/back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[]
基于平衡二叉树(红黑树),动态维护有序序列
size()
empty()
clear()
begin()/end()
++, -- 返回前驱和后继,时间复杂度 O(logn)
set/multiset:
insert()
:插入一个数
find()
:查找一个数
count()
:返回某一个数的个数
erase()
:
(1) 输入是一个数x,删除所有x O(k + logn)
(2) 输入一个迭代器,删除这个迭代器
lower_bound()/upper_bound()
:
lower_bound(x)
:返回大于等于x的最小的数的迭代器
upper_bound(x)
:返回大于x的最小的数的迭代器
map/multimap:
insert()
:插入的数是一个pair
erase()
:输入的参数是pair或者迭代器
find()
[]
:注意multimap不支持此操作。 时间复杂度是 O(logn)
lower_bound()/upper_bound()
vector, 变长数组,倍增的思想
size()
:返回元素个数
empty()
:返回是否为空
clear()
:清空
front()/back()
push_back()/pop_back()
begin()/end()
[]
支持比较运算,按字典序
Tips:
l == r
;类别 | 函数 | 功能 |
---|---|---|
顺序查找 | find() | 用于在指定范围内查找和目标元素值相等的第一个元素 |
find_if() | 根据指定的查找规则,在指定区域内查找第一个符合该函数要求(使函数返回 true)的元素 | |
find_if_not() | 用于查找第一个不符合谓词函数规则的元素 | |
find_end() | 在序列 A 中查找序列 B 最后一次出现的位置 | |
find_first_of() | 在 A 序列中查找和 B 序列中任意元素相匹配的第一个元素 | |
search() | 用于在序列 A 中查找序列 B 第一次出现的位置 | |
search_n() | 用于在指定区域内查找第一个包含多个相同元素的子序列 | |
二分查找 | lower_bound() | 用于在指定区域内查找大于等于目标值的第一个元素 |
upper_bound() | 在指定范围内查找大于目标值的第一个元素 | |
equal_range() | 在指定范围内查找等于目标值的所有元素 | |
binary_search() | 用于查找指定区域内是否包含某个目标元素 |
顺序查找:均在头文件
中
InputIterator find (InputIterator first, InputIterator last, const T& val);
:用于在指定范围内查找和目标元素值相等的第一个元素。该函数会返回一个输入迭代器,当 find() 函数查找成功时,其指向的是在 [first, last) 区域内查找到的第一个目标元素(不是元素的下标);如果查找失败,则该迭代器的指向和 last 相同。InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
:根据指定的查找规则,在指定区域内查找第一个符合该函数要求(使函数返回 true)的元素。当查找成功时,该迭代器指向的是第一个符合查找规则的元素;反之,如果 find_if() 函数查找失败,则该迭代器的指向和 last 迭代器相同;InputIterator find_if_not (InputIterator first, InputIterator last, UnaryPredicate pred);
:用于查找第一个不符合谓词函数规则的元素。当查找成功时,该迭代器指向的是第一个符合查找规则的元素;反之,如果 find_if() 函数查找失败,则该迭代器的指向和 last 迭代器相同;ForwardIterator find_end (ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate pred);
:在序列 A 中查找序列 B 最后一次出现的位置。函数会返回一个正向迭代器,当函数查找成功时,该迭代器指向查找到的子序列中的第一个元素;反之,如果查找失败,则该迭代器的指向和 last1 迭代器相同;InputIterator find_first_of (InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate pred);
:在 A 序列中查找和 B 序列中任意元素相匹配的第一个元素。 函数会返回一个正向迭代器,当函数查找成功时,该迭代器指向查找到的子序列中的第一个元素;反之,如果查找失败,则该迭代器的指向和 last1 迭代器相同;ForwardIterator search (ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate pred);
:用于在序列 A 中查找序列 B 第一次出现的位置。函数返回一个正向迭代器,当函数查找成功时,该迭代器指向查找到的子序列中的第一个元素;反之,如果查找失败,则该迭代器的指向和 last1 迭代器相同。这里的寻找实质上找的是子串。ForwardIterator search_n ( ForwardIterator first, ForwardIterator last, Size count, const T& val, BinaryPredicate pred );
:用于在指定区域内查找第一个包含多个相同元素的子序列。search_n() 函数会返回一个正向迭代器,当函数查找成功时,该迭代器指向查找到的子序列中的第一个元素;反之,如果查找失败,则该迭代器的指向和 last 迭代器相同。二分查找:均在头文件
中,仅适用于查找有序区域
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
:用于在指定区域内查找大于等于目标值的第一个元素。该函数会返回一个正向迭代器,当查找成功时,迭代器指向找到的元素;反之,如果查找失败,迭代器的指向和 last 迭代器相同;ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
:在指定范围内查找大于目标值的第一个元素。该函数会返回一个正向迭代器,当查找成功时,迭代器指向找到的元素;反之,如果查找失败,迭代器的指向和 last 迭代器相同;pair equal_range (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
:在指定范围内查找等于目标值的所有元素;bool binary_search (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
:用于查找指定区域内是否包含某个目标元素。该函数会返回一个 bool 类型值,如果 binary_search() 函数在 [first, last) 区域内成功找到和 val 相等的元素,则返回 true;反之则返回 false。