map是一种集合,其中包含0个或多个不排序的元素对(key, value)。key不重复。
multimap是允许key重复的map。
常用函数:insert, []
#pragma warning(disable : 4786) //屏蔽4786警告
#include<iostream>
#include<map>
using namespace std;
typedef map<int, string> TMyMap;
void PrintSplitterString(short sCount=50)
{
if(sCount<20 || sCount>80)
sCount = 50;
for(short i=1; i<=sCount;i++)
cout<<"-";
cout<<endl;
}
void CoutMapList(const TMyMap& mmMap)
{
for(TMyMap::const_iterator iter=mmMap.begin();iter!=mmMap.end();iter++)
{
string str = iter->second;
cout<<iter->first<<": "<<str.c_str()<<endl;
}
}
int main()
{
TMyMap enumMap;
PrintSplitterString();
cout<<"操作: 往map中添加元素方法一"<<endl;
enumMap[1] = "One";
enumMap[2] = "Two";
CoutMapList(enumMap);
enumMap[2] = "Seven"; //此时将修改键为2的值,如果元素不存在,则新建一个
CoutMapList(enumMap);
cout<<endl<<"操作: 往map中添加元素方法二"<<endl;
enumMap.insert(TMyMap::value_type(2, "Third"));
enumMap.insert(pair<int, string>(102, "aclive"));
CoutMapList(enumMap);
enumMap.insert(TMyMap::value_type(3, "Third"));
CoutMapList(enumMap);
PrintSplitterString();
//查找并获取map中的元素
PrintSplitterString();
cout<<"操作: 查找并获取map中的元素"<<endl;
string tmp = enumMap[4];
cout<<tmp.c_str()<<endl;
TMyMap::const_iterator iter_find = enumMap.find(2);
if(iter_find != enumMap.end())
{
//找到了
cout<<iter_find->second.c_str()<<endl;
}else {
//没有找到
cout<<"没有找到。"<<endl;
}
PrintSplitterString();
//从map中删除运算
PrintSplitterString();
cout<<"操作: 从map中删除元素的方法"<<endl;
CoutMapList(enumMap);
enumMap.erase(3);
cout<<"删除3"<<endl;
CoutMapList(enumMap);
enumMap.erase(enumMap.begin());
cout<<"删除开头元素"<<endl;
CoutMapList(enumMap);
cout<<"清空"<<endl;
enumMap.clear();
CoutMapList(enumMap);
PrintSplitterString();
cout<<endl;
cout<<"所有操作均已经结束"<<endl;
PrintSplitterString();
cout<<endl;
//*********************************************************************************************
//* 现在总结如下:
//* 对于map的操作。最好不要通过下标进行。比如:想要取一个元素,要先通过查找,有了,再操作,没有。不操作。
//* 否则有可能系统会为你自动添加 “莫名奇妙” 的元素进去你都不知道
//先查找后操作!!!!
//*********************************************************************************************
return 0;
}