C++ Map 容器操作實例
// Test_20110514_1853.cpp : Defines the entry point for the console application.
//
//說明:最下面有總結說明。
#include "stdafx.h"
#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 _tmain(int argc, _TCHAR* argv[])
{
//*****************************************************************************************
// * 在此介紹map容器的用法
//*****************************************************************************************
//1.創建一個map容器變量
TMyMap enumMap;
//往map中加入元素
PrintSplitterString();
cout << "操作:往map 中添加元素方法一" << endl;
enumMap[1] = "One";
enumMap[2] = "Two";
enumMap[2] = "Seven"; //此時將是修改鍵為的值,如果該鍵元素不存在,則新建一個
CoutMapList(enumMap);
//////////////////////////////////////////////////////////////////////////
//* 說明:使用此方法的優點是:十分的方便。
//* 缺點:效果不高。因為map 類已經對[] 操作符進行了重載
//* 比如,在插入第個元素時,系統需要先在enumMap中查找主鍵為的項,沒有發現,然后新的對象插入enumMap,鍵是
//* 1,值是一個空的字符串。插入完成后,再將將顯式的Two字符串,賦給值。如果我們要插入的是一個類對象了?
//* 那將會是個很大的開銷。
//* 缺點:如果先前已經存在了鍵為的元素時,則將變成值修改
//////////////////////////////////////////////////////////////////////////
cout << endl << "操作:往map 中添加元素方法二" << endl;
enumMap.insert(TMyMap::value_type(2, "Third"));
//////////////////////////////////////////////////////////////////////////
//* 說明:此方法解決了上面方法的缺點,但有個地方需要注意:
//* 如果列表中已經存在鍵為的元素時,它是不會插入新的元素的。
//////////////////////////////////////////////////////////////////////////
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;
//////////////////////////////////////////////////////////////////////////
//* 刪除的方法有:
//* iterator erase(iterator it);//通過一個條目對象刪除
//* iterator erase(iterator first, iterator last);//刪除一個范圍
//* size_type erase(const key& key);//通過鍵來刪除
//* clear();//相漕運于enumMap.erase(enumMap.begin(), enumMap.end());
//////////////////////////////////////////////////////////////////////////
cout << "==> 全部列表如下:" << endl;
CoutMapList(enumMap);
enumMap.erase(3);
cout << "==> 刪除掉鍵值為:的" << endl;
CoutMapList(enumMap);
cout << endl << endl;
enumMap.erase(enumMap.begin());
cout << "==> 刪除掉第一個元素" << endl;
CoutMapList(enumMap);
cout << endl << endl;
enumMap.clear();
cout << "==> 全部清空" << endl;
CoutMapList(enumMap);
PrintSplitterString();
//所有操作均已經結束
PrintSplitterString();
cout << "所有操作均已經結束" << endl;
PrintSplitterString();
cout << endl;
//*********************************************************************************************
//* 現在總結如下:
//* 對于map的操作。最好不要通過下標進行。比如:想要取一個元素,要先通過查找,有了,再操作,沒有。不操作。
//* 否則有可能系統會為你自動添加 “莫名奇妙” 的元素進去你都不知道
//*********************************************************************************************
return 0;
}