C++ Map 容器操作实例

C++ Map 容器操作实例
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 ;
}

你可能感兴趣的:(C++ Map 容器操作实例)