• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++map的使用方法(转自http://www.cnblogs.com/JCSU/articles/1996876.html) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
/************************************************************************
*
*  Map的特点:  1、存储Key-value对
*              2、支持快速查找,查找的复杂度基本是Log(N)
*              3、快速插入,快速删除,快速修改记
*
/***********************************************************************
*/
#include 
<stdio.h>
#pragma warning(disable:4786)
#include 
<string>
#include 
<map>   //包含头文件
using namespace std;

//输出map中的记录
#define PRINTMAP(iterSuffix, mapName)\
{\
    PRJ_MAP_STRING2INT_WORDREC::iterator iter##iterSuffix 
= mapName##.begin();\
    
for (; iter##iterSuffix != mapName##.end(); ++iter##iterSuffix)\
    {\
        printf(
"\"%s\" -> total: %d\n", iter##iterSuffix->first.c_str(), iter##iterSuffix->second);\
    }\
    printf(
"\n");\
}
/************************************************************************
* 数据类型定义
/***********************************************************************
*/
typedef map
<stringint> PRJ_MAP_STRING2INT_WORDREC;//定义map类型的别名

/************************************************************************/
/* 全局函数
/***********************************************************************
*/
void main()
{
    map
<stringint> mapWordRecPrep;            /* 定义map类型的变量 */
    PRJ_MAP_STRING2INT_WORDREC mapWordRecVerb;  
/* 用别名定义map类型的变量 */

    
//插入记录
    mapWordRecPrep["the"]  = 100/* 数组方式 */
    mapWordRecPrep[
"so"]   = 50;

    mapWordRecVerb[
"find"= 1;
    mapWordRecVerb[
"seen"= 2;
    mapWordRecVerb[
"jump"= 3;
    mapWordRecVerb[
"swim"= 4;
    mapWordRecVerb.insert(map
<stringint>::value_type("look"5)); /* value_type方式 */
    mapWordRecVerb.insert(pair
<stringint>("walk"6)); /* pair方式 */

    
/* value_type和pair方式不出现覆盖现象 */
    printf(
"Insert method: value_type\n");
    pair
<map<stringint>::iterator, bool> inserted;
    inserted 
= mapWordRecVerb.insert(map<stringint>::value_type("walk"7));
    printf(
"%s\n"true == inserted.second ? "Insert success!" : "Insert failed!");
    PRINTMAP(Ver, mapWordRecVerb);

    
/* 数组方式出现覆盖现象*/
    printf(
"Insert method: array\n");
    mapWordRecVerb[
"walk"= 7;
    PRINTMAP(Ver, mapWordRecVerb);

    
//查找记录
    map<stringint>::iterator iter = mapWordRecPrep.find("so");
    printf(
"%s\n", iter == mapWordRecPrep.end() ? "Not find!" : "Find!");

    
//删除记录
    map<stringint>::iterator iterV = mapWordRecVerb.find("seen");
    
if (iterV != mapWordRecVerb.end())
    {
        mapWordRecVerb.erase(iterV);              
/* 迭代器方式删除 */
        printf(
"\nDelete word \"seen\" done!\n");
        PRINTMAP(Verb, mapWordRecVerb);
    }

    
int n = mapWordRecVerb.erase("swim");         /*  关键字方式删除 */
    printf(
"\nDelete word \"swim\" done!\n");
    PRINTMAP(Verb, mapWordRecVerb);

    mapWordRecVerb.erase(mapWordRecVerb.begin(), mapWordRecVerb.end()); 
/* 成片删除 */
    printf(
"\nDelete all word done!\n");
    PRINTMAP(Verb, mapWordRecVerb);

    
//map的其它函数
    if (mapWordRecVerb.empty() && 0 == mapWordRecVerb.size())   /* 判断map是否为空 */
    {
        printf(
"mapWordRecVerb is empty!\n\n");
    }

    PRINTMAP(Pre, mapWordRecPrep)
    mapWordRecPrep.clear();                                     
/* 清空map */
    PRINTMAP(Pre, mapWordRecPrep)
    
if (mapWordRecPrep.empty() && 0 == mapWordRecPrep.size())
    {
        printf(
"mapWordRecPrep is empty!\n\n");
    }
}

输出结果:

Insert method: value_type
Insert failed!
"find" -> total: 1
"jump" -> total: 3
"look" -> total: 5
"seen" -> total: 2
"swim" -> total: 4
"walk" -> total: 6

Insert method: array
"find" -> total: 1
"jump" -> total: 3
"look" -> total: 5
"seen" -> total: 2
"swim" -> total: 4
"walk" -> total: 7

Find!

Delete word "seen" done!
"find" -> total: 1
"jump" -> total: 3
"look" -> total: 5
"swim" -> total: 4
"walk" -> total: 7


Delete word "swim" done!
"find" -> total: 1
"jump" -> total: 3
"look" -> total: 5
"walk" -> total: 7


Delete all word done!

mapWordRecVerb is empty!

"so" -> total: 50
"the" -> total: 100


mapWordRecPrep is empty!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap