STL
- 預設都是從小到大排序
- greater
從大到小的規則 - 也可以自定義排序規則
struct Rule{
bool operator() (const T & a1,const T & a2) const{
//排序規則
}
}
陣列
vector
vector<int>a;
a.push_back() //在最後新增
a.pop_back() //去掉最後一個資料
a.find() //判斷是否存在
a.size()
a.erase() //刪除指標所指資料項
a.swap(vec); //用vec容器替換a容器
//翻轉
#include <algorithm>
reverse(vec.begin(),vec.end());
//去重
sort(vec.begin(),vec.end());
vec.erase(unique(vec.begin(), vec.end()),vec.end());
排序
sort(a+i,a+j,Rule)
左閉右開
二分查詢
binary_search(陣列名+n1,陣列名+n2,key值,Rule排序規則結構名())
- Rule規則要與排序規則一致
- 等於含義是 a必須在b前面 與 b必須在a前面 都不成立
所以key不一定等於查詢到的值
查詢下界
T* lower_bound(陣列名+n1,陣列名+n2,key值)
陣列從小到大排好
*P是查詢區間裡下標最小的, 大於等於"值"後面的元素。如果找不到,p指向下標為n2的元素
T* lower_bound(陣列名+n1,陣列名+n2,key值,Rule排序規則結構名())
返回 *P
*P是查詢區間裡下標最小的, 按自定義排序規則, 可以排在"值"後面的元素。如果找不到,p指向下標為n2的元素
查詢上界
T* upper_bound(陣列名+n1,陣列名+n2,key值)
陣列從小到大排好
*P是查詢區間裡下標最小的, 大於"值"後面的元素。如果找不到,p指向下標為n2的元素
T* upper_bound(陣列名+n1,陣列名+n2,key值,Rule排序規則結構名())
返回 *P
*P是查詢區間裡下標最小的, 按自定義排序規則, 必須排在"值"後面的元素。如果找不到,p指向下標為n2的元素
平衡二叉樹資料結構
multiset st 複雜度log(n)
基本
排序規則:a<b
st.insert() 新增
st.find() 查詢
找不到返回值為st.end()
規則:a必須在b前面 與 b必須在a前面 都不成立
st.erase() 刪除
st.count(x) x的個數
st.size() 元素個數
>返回值都是迭代器
訪問元素 迭代器
multiset
>p相當於指標,指向元素
>可以++,--,!=,==
>不可以比大小,不可加減整數,不可相減
st.begin()
st.end()
st.lower_bound(key)
該函式返回一個迭代器,該迭代器指向剛好大於key的下一個元素。如果引數中傳入的鍵超過了容器中的最大鍵,則返回的迭代器將指向st.end(),該數值對應容器中最後一個元素之後的下標.
st.upper_bound(key)
該函式返回一個迭代器,該迭代器指向剛好等於key的一個元素。如果引數中傳遞的鍵不在容器中,則返回的迭代器將指向剛好大於key的那個元素,如果傳入的key超過了容器中的最大鍵,則返回的迭代器將指向st.end(),該數值對應容器中最後一個元素之後的下標.
set
其中元素內容不能重複
在插入時可能不成功
result = st.insert(value);
返回值時pair型別
struct {
set
bool second;
}
!result.second == true 表示插入不成功
multimap
typedef multimap<T1,T2> MAP_STD
struct {
T1 first;
T2 second;
}
按照first排序 a.first < b.first
MAP_STD 等價於 multimap<T1,T2>
typedef multimap<T1,T2> MP
MP mp;
mp.insert(make_pair(,))
map
可以使用[],插入查詢
下標為關鍵字,返回值為first與關鍵字相同的元素的second