C++学习记录之map容器和multimap容器

本文详细介绍了C++标准库中的map和multimap容器的特点及使用方法。重点对比了两者的一对一与一对多关系,解释了如何进行元素的插入、查找等操作,并展示了多种搜索函数的应用实例。

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

map容器和multimap容器

map和multimap 以平衡二叉树来实现,multimap内部结构是一对多的关系,允许重复元素,而map内部结构是一对一的关系,不允许重复元素。两者都不能直接改变key 的值,value 的值是可以直接修改的;

搜索函数:

//返回键值等于key的元素个数
m.count(key)
std::multimap<int,std::string> map;  
map.insert(std::pair<int,std::string>(0,"hunan"));//添加元素
map.insert(std::pair<int,std::string>(0,"hainan"));
map.insert(std::pair<int,std::string>(1,"guangdong"));
map.insert(std::pair<int,std::string>(2,"shanghai"));
int iCount=map.count(0);//0键对应两个值"hunan","hainan",所以iCount=2
//返回键值等于key的第一个元素,找不到就返回 end()
m.find(key)
std::multimap<int,std::string>::iterator ite=map.find(1);//返回键值为1的迭代器
while(map.end()!=ite)
{
  cout<<ite->second<<endl; //打印出guangdong;shanghai
  ite++;
}
//返回键值小于等于key的第一个元素位置
m.lower_bound(key)
std::multimap<int,std::string>::iterator ite=map.lower_bound(1);
cout<<ite->second<<endl;//打印出guangdong
//返回键值大于key的第一个元素位置
m.upper_bound(key)
std::multimap<int,std::string>::iterator ite=map.upper_bound(1);
cout<<ite->second<<endl;//打印出shanghai
//返回键值==key的元素区间
m.equal_range(key)
std::multimap<int,std::string> map;
map.insert(std::pair<int,std::string>(0,"liuwen"));//map插入元素内部默认从小到大排序
map.insert(std::pair<int,std::string>(0,"dongwenjie"));
map.insert(std::pair<int,std::string>(2,"fangfei"));
map.insert(std::pair<int,std::string>(2,"liubiao"));
map.insert(std::pair<int,std::string>(3,"zengriri"));
map.insert(std::pair<int,std::string>(4,"chenzhilong"));
map.insert(std::pair<int,std::string>(0,"liulingjun"));
pair<std::multimap<int,std::string>::iterator,std::multimap<int,std::string>::iterator> ite=map.equal_range(0);
while(ite.second!=ite.first)
{
  s.append(ite.first->second);//打印出liuwen;dongwenjie;liulingjun
  ite.first++;
}
//遍历删除map中的每个元素
struct tGameRoomType
{
	BYTE byType;
	ComRoomInfo tRoomInfo;
	tGameRoomType()
	{
		byType=255;
	}
};
map<int, tGameRoomType*> m_mapGameRoomNode;
for(int i=0;i<10;i++)//添加10个元素
{
  tGameRoomType *pGameRoomType=new tGameRoomType();
  m_mapGameRoomNode[i]=pGameRoomType;
}
//删除map容器中每个元素
map<int,tGameRoomType *>::iterator it;
for(it=m_mapGameRoomNode.begin();it!=m_mapGameRoomNode.end();it++)
{
  delete it->second;
  m_mapGameRoomNode.erase(it);
}
m_mapGameRoomNode.clear();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值