lower_bound() / upper_bound()
lower_bound(begin, end, x); upper_bound(begin, end, x);
|
若未找到,返回 end。在 vector 中求下标:it - vec.begin()。
map / set
mp[key] = val; mp.count(key); mp.erase(key);
|
st.insert(x); st.count(x); st.erase(x);
|
map 和 set 自己实现了 lower_bound 和 upper_bound 方法,注意 map 以 键 为查找依据。
unordered_map / unordered_set
时间:O(1)(最坏 O(N))。
区别:不支持 lower_bound,遍历无序。
4. priority_queue
时间:O(logN)。
priority_queue<T> pq; pq.push(x); pq.top(); pq.pop();
priority_queue<T, vector<T>, greater<T>> pq;
|
5. __gnu_pbds (Tree / 平衡树)
头文件
#include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds;
|