映射表(map)

  在每个条目被插入时将之按键进行排序。取迭代器指向值时将返回value_type结构,它有两个数据成员:first,second。访问first获得键的数据,访问second获得值的数据。

  除了迭代器访问外,映射表还提供通过它们的键值随机访问的接口(可以用数组进行访问)。

 #pragma warning (disable:4786)
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
using namespace std; template<typename F,typename S>
class value_equals
{
private:
S second;
public:
value_equals(const S& s) :second(s){}
bool operator()(pair<const F, S> elem){ return elem.second == second; }
}; typedef map<int, string> isMap;
typedef isMap::value_type isValType;
typedef isMap::iterator isMapItor; void main()
{
isMap c; c.insert(isValType(, "OneHundred"));
c.insert(isValType(, "Three"));
c.insert(isValType(, "OneHundredFifty"));
c.insert(isValType(, "NinetyNine")); for (isMapItor itor = c.begin(); itor != c.end(); ++itor)
{
cout << "Key = " << itor->first << ",Value = " << itor->second << endl;
} //你可以通过关联数组方式访问映射表
cout << "Key 3 displays value " << c[].c_str() << endl;
//或者以关联数组方式插入键/值对
c[] = "OneHundredTwentyThree";
//基于键找到并删除一个特定值
isMapItor pos = c.find();
if (pos != c.end())
c.erase(pos); //基于值找到并删除元素
pos = find_if(c.begin(), c.end(), value_equals<int, string>("NinetyNine"));
if (pos != c.end())
c.erase(pos);
//如果你需要在遍历链表时删除元素
for (isMapItor itor = c.begin(); itor != c.end();)
{
if (itor->second == "Three")
c.erase(itor++);
else
++itor;
}
}

  注意 !!

 for (isMapItor itor = c.begin(); itor != c.end();)
{
if (itor->second == "Three")
c.erase(itor++);
else
++itor;
}

  如果你需要迭代遍历并手工在映射表中删除对象,需要注意。STL设计者没有像其他容器那样提供一个erase()函数来删除特定元素并返回下一个有效位置。所以,我们不得不在删除后重新排序,以使我们的迭代器不会失效。在这个例子中,与在for循环语句中步进迭代器不同,我们在循环体内以条件语句的方式完成迭代器工作。注意,当一个元素需要删除,我们在将迭代器作为参数传递给erase()后使用后置递增运算符步进此迭代器。但如果此元素不需要删除,我们使用标准前置递增运算符。因为操作顺序的不同,这个方法允许在不使用临时迭代器进行重新排序的情况下进行安全的迭代操作。 

map的访问的更多相关文章

  1. jquery.min.map详见

    温故而知新,翻出来阮前辈的文章记录一下 日期:2013年1月23日 上周,jQuery 1.9发布. 这是2.0版之前的最后一个新版本,有很多新功能,其中一个就是支持Source Map. 访问 ht ...

  2. JavaScript Source Map 详解

    源码地址: http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html 上周,jQuery 1.9发布. 这是2.0版之前的最后 ...

  3. java 网络API访问 web 站点

    package cn.magicdu.think.socket; import java.io.BufferedReader; import java.io.InputStreamReader; im ...

  4. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

  5. 关于Struts2自动装配和访问Servlet API

    自动装配 1.根据属性的getter和setter获取值  index.jsp <s:form action="hello" method="POST"& ...

  6. BAT面试上机题从3亿个ip中找出访问次数最多的IP详解

    我们面临的问题有以下两点:1)数据量太大,无法在短时间内解决:2)内存不够,没办法装下那么多的数据.而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率:2)针对空间,就是 ...

  7. STL整理之map

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Map是什么 Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码 ...

  8. Struts2(八)访问Servlet API

    一.Struts2中的Servlet API 1.1.struts2的Action实现了MVC中C层的作用 针对请求用户显示不同的信息 登录后段保存用户信息 ----session 保存当前在线人数等 ...

  9. DataBinding初探 数据绑定的用法 ,import 集合类型,绑定的表达式,访问集合类型2

    数据绑定的用法 import语法   <data> <import type="android.view.view"/> </data>   如 ...

随机推荐

  1. BZOJ4668 冷战 【LCT】

    Description 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表"铁幕演说",正式拉开了冷战序幕. 美国和苏联同为世界上的"超级大国&quo ...

  2. .NET/C# 使用 Span 为字符串处理提升性能

    .NET Core 2.1 和 C# 7.2 带来了 Span 的原生支持,原本需要使用不安全代码操作的内存块现在可以使用安全的方式来完成.此前在性能和稳定性上需要有所取舍,而现在可以兼得了. 简单的 ...

  3. NET Core中基于Generic Host来实现后台任务

    NET Core中基于Generic Host来实现后台任务 https://www.cnblogs.com/catcher1994/p/9961228.html 目录 前言 什么是Generic H ...

  4. 《selenium2 python 自动化测试实战》(19)——webdriver错误截图

    webdriver 提供错误截图函数 get_screenshot_as_file(),可以帮助我们跟踪 bug,在脚本无法继续执行时候, get_screenshot_as_file()函数将截取当 ...

  5. 隐藏控件HiddenField使用

    HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据. 增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全面 ...

  6. 【Netty】netty学习之nio网络编程的模型

    [一]NIO服务器编程结构 [二]Netty3.x服务端线程模型

  7. 动态添加 items to PopupMenu

    引用自http://stackoverflow.com/questions/10175140/adding-items-to-popupmenu DevExpress.XtraBars.BarMana ...

  8. C# 汉字转拼音 方法(汉字的发音不过400多种(不算声调))

    /* * 2009年8月6日13:19:20 * 调用:this.label1.Text = DXHanZiToPinYin.DXHanZiToPinYin.Convert(this.textBox1 ...

  9. win10安装.net3.5 报错解决

    在win10光盘里提取“microsoft-windows-netfx3-ondemand-package.cab”安装包 然后放在sxs目录 新建批处理...??Cls@ECHO OFFTITLE ...

  10. 执行npm install报错:npm ERR! code EINTEGRITY

    命令行执行npm install报错如下: D:\frontend\viewsdev>npm install npm ERR! code EINTEGRITY npm ERR! sha512-8 ...