`
caiwb1990
  • 浏览: 310062 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++ Map小结

阅读更多

Map介绍
特点:
1.map将Key的object和T的Object绑定到一起,因此是一种Pair Associative Container, 表示其value type为 pair。
2.它同时也是Unique Associative Container,表示没有两个元素具有相同的Key。
3.它还是一种Sorted Associative Container,因此第三个参数只能是less,greater之类的functor, 相比较而言,
  hash table是 equal_to, not_equal_to之类的functor。

map常用的方法主要有:
insert,erease,size,count,begin,end,find,clear,empty

insert方法:
    在map中插入一个元素,map中记录的元素通常为键值对。所以,在存储时会把,键和值封装成pair然后进行插入。
    
    phone.insert(pair<string,string>(name,number));
    //其中name和number为string类型的变量。

    //当然也可以简单的写成
    phone[name]=number;
    //此处phone即为map<string,string>类型的变量。因为map在实现过程中对[]进行了重载。


    第一种方式若插入的元素的键值已经存在于map中,那么就会插入失败,不会修改元素的键值对信息,若键值在map中查找不到,那么就会将该新元素加入到map中去。
    第二种方式比较直观,但存在一个性能的问题。插入2时,先在phone中查找主键为name的项,没发现,然后将一个新的对象插入phone,键是name,值是一个空字符串,插入完成后,将字符串赋为number, 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。若找到键值为name的项,则用number更改原来的number值。

    map<string,string> map;
    
    int Test::input(string name,string number)  
    {  
        //map[name]=number;  
        map.insert(pair<string,string>(name,number));  
        return 0;  
    }    



erease方法:
erease主要是删除map中的某个项,需要参数key,例如phone.erease(name);此句的意思就是删除key值为name的键值对。


find方法:
    map<string,string> map;  
    int  Test::getNum(string name)
    {
	std::map<std::string, std::string>::iterator it = map.find(name);

	if(it == map.end()){  
		return -1;  
	}else{  
		return it->second;  
	}  
    }


size方法:
统计map中键值对的个数,phone.size()返回值即为phone中键值对的个数,若map为空则返回0

    map<string,string> map;  

   int Test::count(){  
       return map.size();  
   }  



count方法:
统计map中某个键值出现的次数,因为map中键值唯一,所以此方法可以用来检测某键值是否存在,例如在删除时可以phone.count(name),若为0则可以提示用户此键值不存在,若为1则直接删除。Ps:erease无论要删除的键值对是否存在都能正常执行。

    map<string,string> map;  



begin、end方法:
begin方法返回map迭代器类型,通过此迭代器与end方法的返回值进行比较就可以很容易的对map进行遍历。

    map<string,string> map;  

    int Test::showAll()  
    {  
        map<string,string>::iterator ite = map.begin();  
        while(ite!=phone.end()) {  
            cout<<ite->first<<"\t";  
            cout<<ite->second<<endl;  
            ite++;  
        }  
        return 0;  
    }  



clear方法:
清空map中的所有元素

    map<string,string> map;  
    int Test::clear()
    {
        map.clear();  
    }



empty方法:
判断map是否为空,若为空则返回真若非空则返回假。
Ps:由于map中存储的是键值对,迭代器为ite,则ite->first为key,ite->second为值

分享到:
评论

相关推荐

    C++ STL 开发技术导引(第6章)

    1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 ...

    C++ Primer第四版【中文高清扫描版】.pdf

    小结 22 术语 22 第一部分 基本语言 第2章 变量和基本类型 29 2.1 基本内置类型 30 2.1.1 整型 30 2.1.2 浮点型 32 2.2 字面值常量 34 2.3 变量 38 2.3.1 什么是变量 39 2.3.2 变量名 40 2.3.3 定义对象 42 2.3.4 ...

    C++ STL开发技术导引(第5章)

    1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 ...

    C++ STL开发技术导引(第3章)

    1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 ...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     小结 23  术语表 23  第Ⅰ部分 C++基础 27  第2章 变量和基本类型 29  2.1 基本内置类型 30  2.1.1 算术类型 30  2.1.2 类型转换 32  2.1.3 字面值常量 35  2.2 变量 38  2.2.1 变量定义 38  2.2.2 变量...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     小结 23  术语表 23  第Ⅰ部分 C++基础 27  第2章 变量和基本类型 29  2.1 基本内置类型 30  2.1.1 算术类型 30  2.1.2 类型转换 32  2.1.3 字面值常量 35  2.2 变量 38  2.2.1 变量定义 38  2.2.2 变量...

    C++第11版本中的一些强大的新特性小结

    主要介绍了C++第11版本中的一些强大的新特性小结,需要的朋友可以参考下

    C++大学教程,一本适合初学者的入门教材(part2)

    小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 2.2 算法 2.3 伪代码 2.4 控制结构 2.5 if选择结构 2.6 if/e1se选择结构 2.7 while重复结构 2.8 构造算法:实例研究1(计数器控制重复) 2.9 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 2.2 算法 2.3 伪代码 2.4 控制结构 2.5 if选择结构 2.6 if/e1se选择结构 2.7 while重复结构 2.8 构造算法:实例研究1(计数器控制重复) 2.9 ...

    C++STL程序员开发指南【可搜索+可编辑】

    2-5 小结· · · · · · ·....................................................... 100 第二篇C++ STL 技术原理和组成 第3 章STL 技术原理· · · · · · · · · · · · · · · · · ·...............

    集合小结 Collection

    java中各种集合详解!...它类似于C++标准模板库中的容器,不过在JAVA的集合类的对象中可以用来存放多种类型的对象。 接口和类共同构成了一个集合框架,集合的概念,一个对象可以装载多个对象,这个对象就是集合对象

    《Android应用开发揭秘》源码

    作者简介  杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。... 17.4小结

    《Android应用开发揭秘》附带光盘代码.

    《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架 ... 17.4小结

    数据结构与算法分析

     小结   练习   参考文献  第2章 算法分析   2.1 数学基础   2.2 模型   2.3 要分析的问题   2.4 运行时间计算   2.4.1 一个简单的例子   2.4.2 一般法则   2.4.3 最大子序列...

    数据结构与算法分析C描述第三版

     小结   练习   参考文献  第2章 算法分析   2.1 数学基础   2.2 模型   2.3 要分析的问题   2.4 运行时间计算   2.4.1 一个简单的例子   2.4.2 一般法则   2.4.3 最大子序列和问题的解...

    Android应用开发揭秘pdf高清版

    内容提要 --------------------------------------------------------------------------------  国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑!《Android应用开发揭秘》...17.4小结

    Android开发案例驱动教程 配套代码

    本章小结 42 第4章 UI基础知识 43 4.1 Android UI组件概述 43 4.1.1 View 43 4.1.2 ViewGroup 44 4.1.3 布局管理器 44 4.2 UI设计工具 44 4.2.1 DroidDraw工具 44 4.2.2 ADT插件UI设计工具 46 4.3 事件处理...

Global site tag (gtag.js) - Google Analytics