map 的几种遍历方式
for(auto [k,v]:map) {
cout<<k<<v<<endl;
}
for(auto kv:map) {
cout<<kv.first<<kv.second<<endl;
}
for(auto it=map.begin();it!=map.end();it++) {
cout<<it->first<<it->second<<endl;
}
对于set存储pair<int, int>
struct pair_hash {
template<class T1, class T2>;
size_t operator () (pair<T1, T2> const &pair) const {
size_t h1 = hash<T1>()(pair.first);
size_t h2 = hash<T2>()(pair.second);
return h1 ^ h2;
}
unprdered_set<pair<int, int>, pair_hash> st;
优先队列
在C++中优先队列默认的是大根堆,如果用小根堆则加入greater.
priority_queue<int, vector, less>s;//less表示按照递减(从大到小)的顺序插入元素
priority_queue<int, vector, greater>s;//greater表示按照递增(从小到大)的顺序插入元素
插入是emplace
#include<bits/stdc++.h>
using namespace std;
class LESS
{
public:
bool operator()(const pair<int, int> a, const pair<int, int> b) const {
return a.second < b.second;
}
};
int main()
{
priority_queue<pair<int, int>, vector<pair<int, int>>, LESS> q;
q.push({1, 5});
q.push({4, 78});
q.push({5, 22});
q.pop();
cout << q.top().second << endl;
cout << q.size() << endl;
return 0;
}
function
function<double(int, int)> diff = [](int x, int y)->double
tuple
提取的时候搞不清楚就用auto
vector自定义排序
static bool cmp(pair<string, string> a, pair<string, string> b) {
if (a.first > b.first) return false;
else if (a.first < b.first) return true;
else return a.second < b.second;
}
记得添加static a是后面的那个元素,如果返回true代表交换
string转数字
atoi(s.c_str());
数字转string
to_strinto_string(num);
string
s.substr(0, 2) #0代表开始位置,2代表取两个字符
s.erase(0, 2)#从零开始的两个字符
queue
q.pop();
q.emplace();
q.front();
定义多维数组vector
vector<vector<vector<int>>> g(x, vector<vector<int>>(y, vector<int>(z));
vector<vetor<int>> g(x, vector<int>(y));
vector添加元素
s.insert(s.begin(), INT_MAX);
tuple
tuple<int, int, int> a;
get<0>(a);
get<1>(a);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)