C++:Map和multimap容器

map和multimap的简介

map是标准关联式容器,一个map是一个键值对序列,即(key, value)对。提供基于key的快速检索能力

map中的key是唯一的,而multimap中的key不是唯一的
集合中的元素按一定顺序排列(基于红黑树,是平衡二叉树,在插入和删除操作上比vector快)
元素插入过程是按排序规则插入,不能指定插入位置

map可以直接存取key对应的value,支持[ ]操作符,如map[key] = value(将key键对应的值修改为value)

multimap与map区别

map支持唯一键值,每个键只能出现一次,而multimap中的相同键可以出现多次,multimap不支持[ ]操作符

map和multimap采用模板类实现,如map<T1, T2> mapT;

map的插入方式

map.insert();

1.通过pair的方式插入对象
mapStu.insert(pair<int, string>(3, "小张"));

返回值pair<iterator,bool>

2.通过value_type的方式插入对象
mapStu.insert(map<int,string>::value_type(1,"小李"));

返回值pair<iterator,bool>

3.通过数组的方式插入值
mapStu[3] = "小刘";

mapStu[4] = "小王";

map<T1, T2, less<T1>> mapA;				//该容器是按键的升序进行排列元素,是默认排列

map<T1, T2, greater<T1>> mapB;			//该容器是按键的降序进行排列元素

map对象的拷贝构造与赋值

map(const map &mp);								//拷贝构造函数

map& operator=(const map &mp);			//重载等号操作符

map.swap(mp);										//交换两个集合容器

map的大小

map.size();												//返回容器中元素的数目

map.empty();											//判断容器是否为空

map的删除

map.clear();												//删除所有元素

map.erase(pos);										//删除迭代器指向的元素,并且返回下一个元素的迭代器

map.earse(beg, end);								//删除区间beg到end的所有元素,为左闭右开区间

map.earse(keyElem);								//删除key为keyElem的对组

map的查找

map.find(key);											//查找键key是否存在,如果存在则返回该键值元素的迭代器,若不存在,则返回map.end();

map.count(keyElem);								//返回容器中key为keyElem的对组个数,对map来说,要么是0,要么是1,而multimap可能大于1

map.lower_bound(keyElem);					//返回第一个key>=keyElem元素的迭代器

map.upper_bound(keyElem);					//返回第一个key>keyElem元素的迭代器

map.equal_range(keyElem);					//返回容器中key与keyElem相等的上下限的两个迭代器,上限是闭区间,下限是开区间,如[beg,end)
eg:
//有元素{1,“小李”}{3,“小张”}{5,“小王”}{7,“小赵”}{9,“小陈”}

pair<map<int , string>:: iterator, map<int , string>:: iterator>  paitE= map.equal_range(5);
map<int, string>::iterator it1 = paitE.first;
map<int, string>::iterator it2 = paitE.second;
it1->second == "小王";
it2->second == "小赵";

通过迭代器遍历

for(map<int, string>::iterator it = mapA.begin(); it < mapA.end(); it++)
{
	pair<int, string> pr = *it;
	int ikey = pr.first;
	string str = pr.second;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值