C++ set multiset map multimap用法

set

a7c14f0e03fc47adaa8d5abed1f7617c.png

1.insert插入

ser中插入的方法规则和搜索二叉树一样,大于key在右边,小于在左边。

插入成功返回pair类型,里面第一个参数iterator 指向新插入节点 bool是true

失败 参数iterator 指向已经存在的节点 bool是false

de9040b4a7434a72b312fe246aa6f007.png

071443c9ffbd41a68d10082a58c1fd59.png

9b67861c82644030a9d9b6eb93a929b5.png

set<int>a;
//1.直接插入值
a.insert(1);
a.insert(2);
a.insert(3);
a.insert(4);
for (auto& i : a)
{
	cout << i << ' ';
}
cout << endl;
//2.在pos位置插入 不常用
a.insert(a.begin(), 10);
for (auto& i : a)
{
	cout << i << ' ';
}
cout << endl;
set<int>b;
//3.插入一段区间 a.begin()+1不对 没有对应重载
b.insert(++a.begin(), a.end());
for (auto& i : b)
{
	cout << i << ' ';
}
cout << endl;

2.find查找

找到返回节点位置iterator,找不到返回end()

c638f1fbd39e411fbd4e83d06d8488b6.png

0d5f3efb1e354a6ebfb0663708672c77.png

3.erase删除

a.erase(a.begin())指定位置删除 删除最小值 

f74fcda1971449e4a1b9ea6e17cecd34.png

1e24a02ceb304500a705433d10f56d3b.png

 

4.count返回set中对应数据的个数

555f9a1f1a044282b6c365ea1f3f7299.png

在set只有0个或者1个,可以判断是否存在。但在multiset中可以存在重复的值,返回对应数的个数。

e61d9cbc793a405ebe8f52d65926882c.png

5.upper_bound lower_bound

196cbd30de79444c90bd122316fbfbf4.png

lower_bound(30) 返回>=30的位置

upper_bound(60) 返回>60的位置

myset.erase(itlow,itup)删除>=30 <60的数。因为删除是[ ) 所以upper_bound返回大于目标值的位置

c01ae0cfd47b4b679586577746cc7a0d.png

multiset

multiset可以插入重复的值

insert

6708b13119204440b4540111a966d7d6.png

一般都会插入成功,所以只返回iterator插入成功的位置

157fd95f1ea14c23af0f65acb9def575.png

find

b59a31dc1d35488b8b7964ce39baccb3.png

multiset查找是根据中序遍历的顺序,如果有多个相同的值返回最左边的节点(中序遍历的第一个)。

4a94ea6c47e44bc38f903a6da61d19d6.png

count

返回对应值的个数

9c37a4d6103141dca435ba8cd951f8c2.png

5095d027cd4441efbbe5e8daa3311c3a.png

equal_range 返回同一个值的范围 左闭右开[ )

86a99e1ef4be445cbd0895b7297f0a06.png

7a6742ce642842d6996e6535816323b6.png

ret.first第一个30位置 ret.second 77位置

map

map和set区别在于map是ket value模型,set数据只有key。

9215096b9d5c4d779f6eb9fb0f56fb44.png

insert

map虽然有两个数据,但只需传一个参数pair就行。

value_typepair<const key_type,mapped_type>

314fe6e6fcca458a8fe1f1a7f935739c.png

de9040b4a7434a72b312fe246aa6f007.png

ae8e11f1b72b40faa26c113d8cadab4a.png

d1a39e320beb4c27890c4b3ecc3f3918.png

插入成功返回pair类型,里面第一个参数iterator 指向新插入节点 bool是true.

失败 参数iterator 指向已经存在的节点 bool是false.

有就返回节点位置,没有创建节点并返回对应位置。

 

operator[]

520e581d14894894a4795929b48d8e44.png

返回值为节点的value,实现过程

65b7d3b655d14014a9df3ef6e2087deb.png

1.make_pair(K,mapped_type)) 创建一个pair对象

2.this->insert(——) 插入有就返回已存在的节点,没有就新创建一个并返回。类型为pair<iterator,bool>

3.(this->insert(——)).first 取目标节点的iterator

4.*((this->insert(——)).first)解引用返回,类型为pair<key,value>

5.*((this->insert(——)).first).second 取value

944bfeb4b3294b3485000a092cbd54e4.png

operator[]用法

3716a97bc11a491a934f663552e781cc.png

multimap

如果两个节点key值一样,multimap仍可以储存。

9fec7f5099ef42da97cf6374ac4d5b44.png

b8c757cb11df4ed4bbd6c82e90b32c0f.png

multimap中没有[]的重载,因为可能有多个相同的值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值