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();