vector
vector<vector<int>> ans;
//插入一个vector
ans.push_back({1,2,3,4});
pair
vector<pair<int, int> > vec;
vec.push_back(make_pair(1, 2));
cout<<vec[0].first<<endl;
map
map<string, int>mp; //创建map
mp.insert(pair<string, int>(a, b)) //向mp中插入值为a,b的键
mp.find() //返回所在位置的迭代器,如果找不到则返回mp.end()
小数
cout<<fixed<<setprecision(2)<<res<<endl; //在输出时固定小数的位数
round(x) //四舍五入取整数
优先队列
priority_queue<int>q; //大顶堆
priority_queue<int, vector<int>, less<int> > que; //小顶堆
//自定义结构体的排序规则
struct node{
int x, y;
friend bool operator < (node a, node b){
return a.y < b.y ;
}
};
priority_queue<node> que;
q.push(a);
q.pop();
二分查找
//lower_bound返回所在值的位置,如果存在相同值,则返回第一个出现的位置
//upper_bound返回所在值的后一个位置,如果存在相同值,返回最后一次出现位置的后面
//如果所查找值不存在,则两个函数都返回最接近的比target小的数的后面位置。
//对于[2, 4, 5]. 当target为4时, st为1, ed为2. 当target为3时,st和ed都为2.
//两个函数都返回物理位置,所以要减去起始地址。
int st = lower_bound(nums.begin(), nums.end(), target) - nums.begin();
int ed = upper_bound(nums.begin(), nums.end(), target) - nums.begin();
全排列
//next_permutation只能获得下一个排列,如果要获得全排列,那么就需要先对数组进行升序排序
vector<int> vec;
next_permutation(vec.begin(), vec.end());
int a[10];
next_permutation(a, a + 10);
set和multiset
//插入
s.insert(element);
//multiset和set用法一样,但前者会保存重复元素
//遍历
set<int>::iterator it;
for (it = s.begin(); it !=s.end();it++)
{
cout << "element:" << *it << endl;
}
//set对vector去重
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
set<vector<int>> st;
do{
st.insert(nums);
}while(next_permutation(nums.begin(), nums.end()));
set<vector<int>>::iterator it;
for(it = st.begin(); it != st.end(); it++){
ans.push_back(*it);
}
set和vector互相转化
vector<int> v;
v = {1,2,2,3,3,4};//建立vector
set<int> st(v.begin(), v.end());//在构造函数中可以直接实现vector转set
v.assign(st.begin(), st.end());//用assign实现set转vector
int和string互相转化
// int to string
int a = 13245;
string s = to_string(a);
//string to int
string s = "123456";
int b = atoi(s.c_str());