【STL】Map、Set、Bitset、堆。一些操作

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类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值