Map
数组
map<int,int> mp; //定义类型(会按第一维关键字自动排序
mp[x] = y; //赋值,x可以赋较大,y为映射值
mp.size(); //里面元素的多少
map<int,int>::iterator k; //定义迭代器
map.find(x); //找位置,返回迭代器,找不到返回map.end()
for(k = mp.begin(); k != mp.end(); k++)
//遍历。(注意mp.end()只相当于结束符号,不代表存入的东西)
cout << it->first << " " << it -> second << endl;
//输出第一个元素,第二个元素。
Set
链表
//set<long long> a; //类型,数值不可以重复
multiset<long long> a; //类型,数值可以重复
a.insert(x);//插入x
a.size();//元素多少
a.lower_bound(x);//大于等于x的第一个迭代器位置
a.upper_bound(x);//严格大于x的第一个迭代器位置
set<long long>::iterator kkk = a.upper_bound(x);
//定义kkk为迭代器,且赋值为a里第一个严格大于x的数的迭代器
*kkk //kkk指向的值
a.erase(kkk); //删掉这个迭代器(删掉一个不存在的数可能会挂)
a.end() //尾巴,它的值是元素个数?
a.begin() //第一位(最小值)的迭代器
*(--a.end()); //(最大值)
*a.rbegin(); //(最大值)
*a.begin(); //(最小值)
Bitset
相当于一个01串
bitset<x> q(y); //长度为x,二进制保存y,前面用0补充
string s = "101";
bitset<x> q(s); //长度为x,前面用0补充
//在进行有参构造时,若参数的二进制表示比bitset的size小,则在前面用0补充;
//若比bitsize大,参数为整数时取后面部分,为字符串时取前面部分:
//异或、与、或都可直接用
//最低下标为0
q[1] = 1;
q.count(); //1的位数
q.size(); //bitset大小
q.test(x); //x处的元素是0还是1
q.any(); //bitset中是否有1
q.none(); //bitset中是否没有1
q.all(); //bitset中是全部为1
q.flip(x); //x处的元素取反
q.flip(); //全取反
q.set(x); //x位取1
q.set(); //全取1
堆
堆
struct asdf{ //数据体
int x,y;
bool operator < (const asdf& cmp) const{ //定义小于号
return x < cmp.x;
}
}
priority_queue<int> q; //大根堆(如果要用小根堆就存负数【)
priority_queue<asdf> Q; //数据体
q.push(x);
while(!q.empty()){
printf("%d", q.top());
q.pop();
}
Extra
printf("%s", str.c_str()); //输出string类型