#include<bits/stdc++.h>
next_permutation
作全排列
动态数组vector
vector<>
常用push_back
访问元素——数组名[0]……
sort排序
默认从小到大排(可更改)
sort(a.begin(),a.end())
排序规则可以更改
int cmp(string s1,string s2){
return s1+s2>s2+s1;
}
sort(s,s+n,cmp);
//其他形式
sort(s,s+n,greater<int>());
string类
string s
s.size()指s里有多少个字符
s.erase()用来删除
stringstream(流,用来将输入的字符类型变成其他类型):
stringstream ss;
string s;
int a=123;
ss<<a;
ss>>s;
访问每一个元素s[0]……
stack栈
先进后出
stack<> s
s.push()把某个元素放进去
s.pop()弹出
s.empty()是否为空
s.top()
s.size()
s.top()返回的是栈顶元素,s.pop()弹出的是栈顶元素
queue队列
先进先出
queue<> q
front()
:返回队列前端(队首)元素的引用。如果队列为空,则front()
操作是未定义的(undefined behavior)。back()
:返回队列后端(队尾)元素的引用。与front()
类似,如果队列为空,back()
操作也是未定义的。push()
:在队列末尾添加一个元素。pop()
:移除队列前端的元素。与front()
相对应,pop()
操作后队首元素将被移除。empty()
:检查队列是否为空,如果队列为空则返回true
,否则返回false
。size()
:返回队列中元素的数量。
map
map<string,int> m
前面是key,后面是value(key有唯一性,任意两个数据的key不能相同)
m[key]=1(赋值语句)(这是经常使用的)
m.find(key)(key是关键字)
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
iter = mapStudent.find("123");
if(iter != mapStudent.end())
cout<<"Find, the value is"<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
删除元素
//迭代器刪除
iter = mapStudent.find("123");
mapStudent.erase(iter);
//用关键字刪除
int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0
//用迭代器范围刪除 : 把整个map清空
mapStudent.erase(mapStudent.begin(), mapStudent.end());
//等同于mapStudent.clear()
set
set<> s
s.insert()
set排序:从小到大
struct cmp{
bool operator()(int a,int b){
if(abs(a-b) <= k) return false;
else return a < b;
}
};
set<int,cmp> s
set和map的插入和删除操作效率比其他容器更高
访问元素(只能通过迭代器访问)
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>st;
st.insert(3);
st.insert(5);
st.insert(5);
st.insert(2);
for(set<int>::iterator it=st.begin();it!=st.end();it++)
cout<<*it<<" ";
return 0;
}
iterator
map<int,int>::iterator it(迭代器,用来访问map或是set的元素的)