c++容器笔记

本文介绍了Map的键值对存储、查找方法,包括find()和count()。讨论了Vector的扩容机制和存储大数据的建议,以及emplace_back与push_back的区别。同时,讲解了Set的排序规则,插入、删除元素的方法,以及lower_bound和upper_bound等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Map

哈希表,存储键值对。

检查Map中是否存在该键值可以用Map.find();如果找到会返回相应位置的iterator,没找到会返回Map.end()

因此可以使用另一种方法,map.count()。如果存在会返回1,不存在返回0。

此外,当直接map[i]而没有其他操作时,会调用值的数据类型的默认构造函数,这也可以用来做一个判断而不用其他函数操作。

例:

 执行完第15行的时候,map会多出一个键值对,值的i==1。

Vector

数组,每次扩容时会申请空间并且把原来的数据复制过去。因此在vector中存储大数据时最好存储数据的指针,减少复制的开销。扩容机制也是对vector进行push_back和pop_back时iterator失效的原因。

emplace_back和push_back的区别

emplace_back在调用时,直接在容器末尾生成对象。

push_back先生成对象,再把对象拷贝到容器末尾。

Set

排好序的集合。默认升序排列。注意set.bigin()、set.end()是不检查是否为空的,会导致空指针访问

set<int> q;     //以int型为例 默认按键值升序
set<int,greater<int>> p;  //降序排列 
int x;
q.insert(x);	//将x插入q中
q.erase(x);		//删除q中的x元素,返回0或1,0表示set中不存在x
q.clear();		//清空q
q.empty();		//判断q是否为空,若是返回1,否则返回0
q.size();		//返回q中元素的个数
q.find(x);		//在q中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end()
q.lower_bound(x); //返回一个迭代器,指向第一个键值不小于x的元素
q.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素

q.rend();		  //返回第一个元素的的前一个元素迭代器
q.begin();		  //返回指向q中第一个元素的迭代器

q.end();		 //返回指向q最后一个元素下一个位置的迭代器
q.rbegin();		 //返回最后一个元素
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值