C++ 容器和库函数的使用
sort
sort(a,a+20);
sort(a,a+n,cmp);
bool cmp(string a,string b)
{
return a>b;
}//逆序就加个比较函数比如这样,int型同理
sort(v.begin(),v.end())
sort(vt.begin(), vt.end(), cmp());
class cmp {//比较用的函数,方便使用sort排序
public:
bool operator()(const pair<vector<int>, int>& p1, const pair<vector<int>, int>& p2) {//比较的数据类型是pair类型
if (p1.second == p2.second)return p1.first < p2.first;//表示当数对的二号位置的数字相同时,比较一号位置,从小到大排序
else return p1.second > p2.second;//表示数对的二号位不同时,从大到小排序
}
};
sort()和c++优先队列的区别:
sort是返回true时候就是a在前(第一个参数),而c++的priorityqueue和c++的sort写比较函数时是相反的顺序。
java:
sort是返回负数时候就是a在前,且PriorityQueue和java的sort的比较函数写法相同。
还有:
1.java的sort和PriorityQueue,都是用接口实现类的对象传参的方式提供compare
2.c++的sort可以完全使用cmp函数也可使用cmp对象,而priorityqueue必须要求元素类型实现bool operator <(const T & b)const 函数
memset()
用来初始化数组的每个字节(8位),由于int型4个字节,所以一般只能用来初始化一些特殊的数比如0,0x3f,
可以用来快速初始化,int数组,对一二维数组用法相同,只能设置这三种才有意义
memset(dist,0,sizeof dist);//0x00
memset(dist,-1,sizeof dist);//-1的二进制为全1,所以也可以写0xff
memset(dist,0x3f,sizeof dist);
容器遍历(迭代器)
迭代器实质上就是指针
可以*it
也可以it->
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)
{
}
容器变量的复制:
backup=q;不是复制引用,其中一个修改后,另一个不会随之变化
priority_queue
class mpair
{
public :
int id,w;
public :
mpair(int a,int b)
{
id=a;w=b;
}
bool operator <( const mpair & b) const //在优先队列中从小到大
{
return w>b.w;
}
};
priority_queue<mpair> q;
priority_queue<int> q;//从大到小
等于priority_queue<int, vector<int>, less<int> > a;
priority_queue<int, vector<int>, greater<int> > a;//从小到大
q.push(mpair(u,0));
pop()
top()
size()
empty()
stack
stack<int> stk;
push()
top()
pop()
size()
empty()
没有现成的clear()函数,需要while(!s.empty())s.pop();
queue
queue<int> q;
q.push(1);
q.pop();
q.front();
q.back();
q.size();
q.empty();
vector
vector<int> v;
vector<pair<vector<int>, int> >vt(m.begin(), m.end());
上面m是映射,可以用映射来初始化
v.push_back(1);
v.pop_back();
v.clear();
v.front();
v.back();
v.size();
v.empty();
取下标v[i]
set
set<int> s;
s.insert(1);
s.count(1);
s.find(1);
s.erase(1);
s.clear();
map
键值对中值为int时,默认值为0
map<vector<int>, int>m;
m[vv]++;直接对下标操作
m.find()==m.end()