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()

unordered_map

posted @ 2022-11-17 23:03  林动  阅读(11)  评论(0编辑  收藏  举报