最近写的一道题用到了STL中的map,这部分内容之前没有系统学过,这里就简单归纳一下吧。

资料来源:

https://www.w3cschool.cn/cpp/cpp-fu8l2ppt.html

http://c.biancheng.net/view/338.html

https://blog.csdn.net/u010429424/article/details/75332700

常用操作:

  1. 添加元素:可以用Insert,也可以下标添加
   map<int ,string> maplive;
.maplive.insert(pair<int,string>(,"aclive"));
.maplive.insert(map<int,string>::value_type(,"hai"));
, maplive[]="April";//map中最简单最常用的插入添加!

  2.查找:注意,map中元素是key-value配对的,要查找一个元素,需要提供它的key。map的内部是以平衡二叉树形式储存的,所以查找的速度为O(logn),速度很快。

  另外,这也意味着,map内部的元素是有序的!所以我们如果只是需要一个按key排序的输出的话,不需要对map进行排序,直接遍历输出即可。

  3.遍历:map的遍历是通过迭代器完成的:

1) 正向迭代器,定义方法如下:()

容器类名::iterator  迭代器名;

2) 常量正向迭代器,定义方法如下:

容器类名::const_iterator  迭代器名;

3) 反向迭代器,定义方法如下:

容器类名::reverse_iterator  迭代器名;

4) 常量反向迭代器,定义方法如下:

容器类名::const_reverse_iterator  迭代器名;

遍历过程:

map<int, int>::iterator iter;
iter = _map.begin();
while(iter != _map.end()) {
cout << iter->first << " : " << iter->second << endl;
iter++;
}

注意这里的map.end(),它和map.begin(),map.lower_bound(),map.upper_bound()一样,返回的是一个迭代器而不是元素本身。

*易错点:

map::lower_bound(key):返回map中第一个大于或等于key的迭代器指针

map::upper_bound(key):返回map中第一个大于key的迭代器指针

另外:

  1.对于map中没有的key,如果访问的话返回的value为0;

  2.map虽然有“下标”访问并且内部元素是有序的,但这不代表可以实现类似数组的下标访问,即访问第0个、第1个·····第n个元素。

  3.map中的end()指向的不是最后一个元素,而是最后一个元素的下一个元素,这样是为了遍历时的方便,即使用while(iter != _map.end())的条件变量时可以遍历到最后一个元素。

举个例子:

#include<bits/stdc++.h>
using namespace std;
int main(){
map<int,int>testmap;
testmap[]=;
testmap[]=;
//重要!end()指向的是下一个而非尾部
cout<<"begin's first:" <<testmap.begin()->first<<"begin's second:"<<testmap.begin()->second<<" end's first: "<<testmap.end()->first<<endl;
cout<<testmap[]<<endl;
getchar();
}

结果为:

map<int ,string> maplive; 1.maplive.insert(pair<int,string>(102,"aclive")); 2.maplive.insert(map<int,string>::value_type(321,"hai")); 3, maplive[112]="April";//map中最简单最常用的插入添加!

C++STL—map的使用的更多相关文章

  1. stl::map之const函数访问

    如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const ...

  2. hdu4941 Magical Forest (stl map)

    2014多校7最水的题   Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit ...

  3. [CareerCup] 13.2 Compare Hash Table and STL Map 比较哈希表和Map

    13.2 Compare and contrast a hash table and an STL map. How is a hash table implemented? If the numbe ...

  4. STL MAP及字典树在关键字统计中的性能分析

    转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...

  5. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

  6. STL MAP 反序迭代

    ITS_NOTICE_MAP::reverse_iterator it = noticeMap.rbegin(); for ( ; it != noticeMap.rend(); ++it ) { I ...

  7. 泛型Binary Search Tree实现,And和STL map比较的经营业绩

    问题叙述性说明: 1.binary search tree它是一种二进制树的.对于key值.比当前节点左孩子少大于右子. 2.binary search tree不是自平衡树.所以,当插入数据不是非常 ...

  8. Dictionary,hashtable, stl:map有什么异同?

    相同点:字典和map都是泛型,而hashtable不是泛型. 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高, ...

  9. STL Map和multimap 容器

    STL Map和multimap 容器 map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供 基于key的快速检索能力.       ...

  10. C++ STL map使用

    Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map构造函数:map<string , in ...

随机推荐

  1. 冰多多团队Beta阶段发布说明

    Bingduoduo 语音Coding(Beta):项目Github地址 Beta版本新功能介绍 在beta阶段我们很好地将alpha阶段已经设计好的编辑器和shell整合了起来,推出了一个完整的ID ...

  2. Nginx+keepalived实现负载均衡高可用配置

    1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...

  3. linux查找历史命令

    1.ctr+r  输入搜索关键词 2.&history 3.上箭头翻看

  4. Armbian编译以及定制

    Armbian项目地址 Github: https://github.com/armbian/build Armbian for TV Box 项目地址 Github: https://github. ...

  5. [转]docx4j实现动态表格(模板式)

    原文地址:https://chendd.cn/information/viewInformation/other/257.a 除了前篇文章中讲到的编程式创建表格外,基于模板实现的列表表格也是非常常用或 ...

  6. Roberts算子

    https://blog.csdn.net/likezhaobin/article/details/6892176 https://zhuanlan.zhihu.com/p/35032299 Robe ...

  7. what's the psutil模块

    what's the psutil模块 psutil 是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要用来做系统监控,性能分析,进程管理.它实现 ...

  8. 【SpringBoot】SpringBoot日志框架(四)

    日志框架介绍 在开发过程中,我们经常使用到日志来进行排查问题,我们使用的日志框架都是由2部分组成(日志API + 日志实现) 日志API(及日志抽象层)有:SLF4j(Simple Logging F ...

  9. sql 连续分组判断 partition by

    partition by 会根据分类字段进行排序 加上rownum 可以形成 每组从1开始重新排序 举个例子, 我要根据时间为依据,连续出现合并为一组,统计每组在区间里的次数 ------------ ...

  10. 以A表中的值快速更新B表中记录的方法

    1.问题描述 有两张表,A表记录了某些实体的新属性,B表记录了每个实体的旧属性,现在打算用A中的属性值去更新B中相同实体的旧属性,如下图所示: 类似这样的需求,怎样做比较高效呢? 2.制作模拟数据   ...