std::map用法

std::map用法

STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用。
在STL模板类中,用于线性数据存储管理的类主要有vector, list, map 等等。本文主要针对map对象,结合自己学习该对象的过程,讲解一下具体用法。本人初学,水平有限,讲解差错之处,请大家多多批评指正。
map对象所实现的功能跟MFC得CMap相似,但是根据一些文章的介绍和论述,MFC CMap在个方面都与STL map有一定的差距,例如不是C++标准,不支持赋值构造,对象化概念不清晰等等。
使用map对象首先要包括头文件,包含语句中必须加入如下包含声明
#include <map>
注意,STL头文件没有扩展名.h
包括头文件后就可以定义和使用map对象了,map对象是模板类,需要关键字和存储对象两个模板参数,例如:
std:map<int, CString> enumMap;
这样就定义了一个用int作为关键字检索CString条目的map对象,std表示命名空间,map对象在std名字空间中,为了方便,在这里我仍然使用了CString类,其实应该使用标准C++的std::string类,我们对模板类进行一下类型定义,这样用的方便,当然,不定义也可以,代码如下:
typedef std:map<int, CString> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;
如此map对象就定义好了,增加,改变map中的条目非常简单,因为map类已经对[]操作符进行了重载,代码如下:
enumMap[1] = "One";
enumMap[2] = "Two";
.....
enumMap[1] = "One Edit";
或者insert方法
enumMap.insert(make_pair(1,"One"));
返回map中目前存储条目的总数用size()方法:
int nSize = enumMap.size();
查找map中是否包含某个关键字条目用find方法,传入的参数是要查找的key,在我们的例子里,是一个int数据,map中的条目数据是顺序存储的,被称作为一个sequence,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator,iterator被定义为map中条目的类型,查找是否包含某个条目的代码如下:
int nFindKey = 2;            //要查找的Key
UDT_MAP_INT_CSTRING::iterator it;    //定义一个条目变量(实际是指针)
it = enumMap.find(nFindKey);
if(it == enumMap.end()) {
    //没找到
}
else {
    //找到
}
//find的时候注意key的数据类型,最好用CString之类的能消除数据类型差异的key,否则可能会出现强制转换后仍找不到的情况。
需要说明的是iterator, begin(), end()是STL模板类的一个通用概念,操作方法也大同小异
通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator.first 和 iterator.second 分别代表关键字和存储的数据
移除某个条目用erase() 该成员方法的定义如下
iterator erase(iterator it);
iterator erase(iterator first, iterator last);
size_type erase(const Key& key);
分析一下这三个重载方法定义,大家不用说也能看明白一点点了吧,第一个通过一个条目对象删除,这个对象可以从find之类的方法获得,第二个定义删除一个范围,需要一个起始条目和一个终止条目,第三个通过关键字删除,这个与我们的想法和习惯最接近,代码例子如下:
enumMap.erase(1);            //删掉关键字“1”对应的条目
enumMap.erase(enumMap.begin());        //删掉第一个条目
enumMap.erase(enumMap.begin(), enumMap.begin() + 1);    //删掉起始的两个条目
呵呵,增删改查都说完了,相信读过本文,map对象也应该会使用了,这些是我1个多星期来钻研的结果,拿出来与大家分享。
最后,还有一个empty(),不用问,全删的时候就不要一个一个erase了,empty()就相当于enumMap.erase(enumMap.begin(), enumMap.end());
map的遍历:
#include<map>
#include<string>
#include<iostream>
using namespace std;

int main()
{
    map<string,int>  m;
    m["a"]=1;
    m["b"]=2;
    m["c"]=3;
    map<string,int>::iterator it;
    for(it=m.begin();it!=m.end();++it)
        cout<<"key: "<<it->first <<" value: "<<it->second<<endl;
    return   0;
}

map<string,int>::iterator it;   定义一个迭代指针it。 
it->first 为索引键值,it->second 为值。

 
在对象中应用时,最好在析构函数中要调用它的clear方法,
例如class a{
map<int,int> m;
~a(){
m.clear();
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马逊s3云存储接口_当对象存储“湖”有了强一致性

从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前&#xff0c;S3 对象操作都是遵循 “最终一致性”原则&#xff0c;对象存储服务本身就是一个复杂的分布式系统&#xff0c;但对用户暴露简单的 API 服务接口&#xff0c;无限扩展存储大小&#xff0c;极…

Web——Request转发和Response重定向

• Request请求转发 ○ 请求转发 请求转发&#xff08;forward&#xff09;&#xff1a;一种在服务器内部的资源跳转方式 ○ 实现方式&#xff1a; request.getRequestDispatcher("资源B路径").forward(request,response);○ 请求转发资源间共享数据&#xff1a;使用…

if else if语句格式_闲话Python之条件语句IF

我发现好像哪里都会有if&#xff0c;下面就来聊聊Python当中if的常见用法。最简单的格式就是&#xff0c;只有一个if&#xff0c;比如下面这个&#xff1a;my_deposit代码中的my_deposit50000等效于my_depositmy_deposit50000his_deposit-50000则等效于his_deposithis_deposit-…

delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法&#xff08;一&#xff09; office 2007和2010是现在大多数人经常使用的办公软件&#xff0c;几乎每天都在使用。因此&#xff0c;在软件中如果使用类office的界面样式&#xff0c;客户用着非常习惯&#xff0c;而且学习曲线低&#xff0c;office…

Boost库之function的使用

http://www.cnblogs.com/hujian/archive/2009/06/04/1495813.html Boost库的function是一组函数对象包装类的模板&#xff0c;实现了一个泛型的回调机制。Boost库的function与函数指针相比&#xff0c;优点在于它允许用户在目标的实现上拥有更大的弹性&#xff0c;即目标既可以…

Web笔记——Filter过滤器

○ 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上&#xff0c;纯粹的底层运维就不需要太关注&#xff1b;1.2 数据库与表类比sheet是表&#xff0c;整个Excel文件是一个数据库&#xff1b;1.3 行与列1.4 主键&#xff08;人的身份证&#xff09;表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日&#xff0c;永中Office办公软件完成了与统一操作系统UOS的适配工作&#xff0c;此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定&#xff0c;大幅提升用户在信创计算机上的办公体验&#xff0c;可为政企提供安全可靠的IT环境。永中Office是由永…

ContentType的类型

早上做了下载的功能&#xff0c;涉及到ContentType的类型&#xff0c;特地上网查了下&#xff0c;收集了这些类型  ".*""application/octet-stream"  ".001""application/x-001"  ".301""application/x-301"…

c3p0依赖导入失败问题

今天在学习c3p0的时侯&#xff0c;导入依赖后变红然后去maven仓库[&#xff08;https://mvnrepository.com/artifact/com.mchange/c3p0&#xff09;]中找&#xff0c;发现是groupId的问题。 更改后正常

open函数中O_CLOEXEC标志的开关

Linux中&#xff0c;文件描述符有一个属性&#xff1a;CLOEXEC&#xff0c;即 当调用exec&#xff08;&#xff09;函数成功后&#xff0c;文件描述符会自动关闭。在以往的内核版本&#xff08;2.6.23以前&#xff09;中&#xff0c;需要调用 fcntl(fd, F_SETFD, FD_CLOEXEC) 来…

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量&#xff0c;数据类型&#xff0c;运算符和表达式以及程序流程控制&#xff0c;数组&#xff0c;函数的相关内容&#xff0c;所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”&#xff0c;选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏&#xff0c;更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

vb.net 与 c# 的switch ... case ...的一个重要区别

vb.net 与 c# 的switch ... case ...的一个重要区别 与vb.net中case可以写比较表达式>,<,等&#xff0c;但在c# &#xff08;3.0及以下&#xff0c;不知道以后会不会加上&#xff09;中就没有这样的功能 看以下vb.net代码&#xff0c;确是c#的switch case没有的 [vb] vie…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…

c++ 字符串拼接_字符串拼接新姿势:StringJoiner

来自&#xff1a;Hollis(微信号&#xff1a;hollischuang)在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的S…

html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试

一个网站的网页是好是坏&#xff0c;往往是体现在速度和高度两个方面&#xff0c;速度是网页所展示出来的时间&#xff0c;能否为浏览用户节约时间。高度则是一个网站网页本身的质量&#xff0c;能否为浏览用户带来真正的好体验。然而看似简单的两个点&#xff0c;但是背后要实…

A20 文件系统预装APK

1. 将需要预装的apk放入 android4.2/device/softwinner/wing-common/apk/ 或者 android4.2/device/softwinner/wing-common/preinstallapk/ 路径下 2. 如果apk有依赖的so文件&#xff0c;需要将so文件放入 android4.2/device/softwinner/wing-common/apklib/ 路径下。…

怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤

大侠好&#xff0c;欢迎来到FPGA技术江湖&#xff0c;江湖偌大&#xff0c;相见即是缘分。大侠可以关注FPGA技术江湖&#xff0c;在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源&#xff0c;或者一起煮酒言欢。今天和大侠简单聊聊使用LativeLink时&#xff0c;…

Spring笔记——数据源配置

常见的数据源&#xff08;连接池&#xff09;包括&#xff1a;DBCP、C3P0、BoneCP、Druid等接下来以C3P0为例讲述一下spring配置数据源的过程数据源的开发步骤 ①导入数据源的坐标和数据库驱动坐标 ②设置数据源的基本连接数据&#xff0c;将其放入jdbc.properties文件中 ③app…