STL

study_all_day發表於2024-04-18

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排序規則結構名())

  1. Rule規則要與排序規則一致
  2. 等於含義是 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::iterator p;

>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::iterator first;

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

相關文章