STL初步
头文件
sort
sort(数组名+n,数组名+m)// 能,m为整数 ,适用于基本类型 ,范围为下标n到m-1,下标m不参与排序
//自定义排序
struct rule{
bool operator(const T & a ,const T & b)(){
// 若a在b前,则返回true,否则false
}
};
sort(a,a+sizeof(a),rule());
二分查找
在排好序的数组上进行二分查找
等于的含义:a等于b 等价于a>b 和a<b都不成立。
binary_search(a,a+a.szie(),key,rule());
lower_bounder(a,a+a.szie(),key);// 查找下界,返回数组存储元素类型的指针,是大于查找值下标最小的
lower_bounder(a,a+a.szie(),key,rule());//查找排在可key后面的元素,查不到,指向下标为a+size()的元素
upper_bounder
平衡二叉树
增,删,查都能在
l
o
g
(
n
)
log(n)
log(n)复杂度完成
四种排序容器
- multiset
- set
- multimap
- map
multiset 上的迭代器:++,–,!=,==,不能比大小,不能加减整数,不能相加减
#include <set> // multiset ,set
multiset<T> st;
int a[];
for()
st.insert(a[i]);//插入的是复制品
multiset<int>::iterator i;
for(i= st.begin();i!=st.end();i++)
cout<<*i;
i = st.find(32)
if(i == st.end())
cout<<"not find";
else
st.eraser(i);
multiset<int rule> st2;
set和multiset的区别:set中不能有重复的元素。(重复元素:a和b重复 ,即a等于b,a>b和 a<b都不成立。
set可能插入失败
pair<set<int>::iterator,bool> result = st.inset(2);
if(! result.second)
cout<<"exists";
pair<T1,T2>
struct{
T1 first;
T2 second;
};
multimap<T1,T2> mp;
struct{
T1 first;
T2 second;
};
multimap是按first排序,按first查找
默认是升序
map不能有关键字重复
可以使用[],下标为关键字,返回second
reference
北大 程序设计与算法(一)C语言程序设计 mooc https://www.icourse163.org/course/PKU-1001553023