STL的食用
set
set<T> s;
紅黑樹實現,自帶$O(logn)$復雜度
沒有重復元素,可用于去重。
對于區間sort且區間小范圍平移的題,可優化暴力$O(nlogn)$整區間sort -> $O(logn)$單點修改set
- s.insert(val)
- s.erase(val)
- s.lower_bound(val)? 返回大于等于val的第一個元素的迭代器
- s.upper_bound(val) 返回大于val的第一個元素的迭代器
- s.count(val) 由于非重,只有0 1
- s.find(val)??? 查找val,返回迭代器。若無,返回s.end()
聲明迭代器:set<T>::iterator it;
++it --it? 可查找前趨后繼 復雜度$O(logn)$
?
multiset:
multiset<T> s;
紅黑樹實現,自帶$O(logn)$復雜度
支持重復元素
操作與set基本相同,以下有區別:
- s.erase(val)? 會刪除所有值為val的元素。
- s.erase(迭代器)? 刪除迭代器引用的元素,而不影響其他
于是只刪除一個元素要用 s.erase(s.find(val)) 當然要保證s.find(val)!=s.end()
- s.count(val) 返回 值為val的元素個數
迭代器類似于set
?
map
map<T1,T2> m;
紅黑樹實現,自帶$O(logn)$復雜度,所以當數不大沒有必要或時間復雜度吃緊時不用為好
非常好用的stl,當桶的直徑過大但元素很少時適用。然而我今天才會
map<int,int>? 1.大數映射小數? 2.桶
map<string,int>? 強行"hash"
map<pair<int,int>,int>? 二維拍成一維
?
我們稱T1為key,T2為value。
那么有一下用key訪問value的方式:
- 下標訪問:m[key]? 返回key對應的value。此時的下標不同于數組下標,此下標不連續 更像是調用函數。
注意:m[key] 訪問若不存在該key對應的value? 則會強行賦值。int會賦0
- m.at(key)? 不同于下標訪問,當存在上一行的情況時會報錯
?
pair:
pair<T1,T2> p;
基本操作:
- pair<T1,T2> p(t1,t2);?? 聲明并賦值
- pair? make_pair(t1,t2);?? 生成一個pair并返回
- p=make_pair(t1,t2); 賦值
- p.first
- p.second
- p1 ? p2????? ? 屬于 {< > == <= >= ......} 以p.first為第一關鍵字? p.second為第二關鍵字
?
轉載于:https://www.cnblogs.com/hzoi-yzh/p/11231579.html
總結
- 上一篇: 手动将自定制的WebPart部署到 Sh
- 下一篇: WTL 自绘 进度条Progressba