map详解<一>
首先了解下pair工具类:
这个类在头文件<utility>,功能:将俩个类型可能不一样的值组合在一起。,通过first和second来访问这两个值。还定义了operator == 和operator <用来比较两个值;
看实例:
#include <iostream>
#include <map>
#include <utility>
int main()
{
std::pair<int ,std::string> myPair(,"hello");
std::pair<int ,std::string> myOtherPair; myOtherPair.first = ;
myOtherPair.second = "world"; std::pair<int,std::string> myThirdPair(myOtherPair); if(myPair < myOtherPair)
{
std::cout << "myPair < myOtherPair" << std::endl;
}else
{
std::cout << "myPair > myOtherPair" << std::endl;
} if(myOtherPair == myThirdPair)
{
std::cout << "myOtherPair == myThirdPair" << std::endl;
} else
{
std::cout << "myOtherPair != myThirdPair" << std::endl;
}
return ;
}
结果是:
myPair > myOtherPair
myOtherPair == myThirdPair
这个库也提供了make_pair<>的工具模板;通过make_pair()来构建一个pair;
std::pair<int,std::string> myPair = std::make_pair(,"hello");
std::cout << myPair.first << " " << myPair.second << std::endl;
结果是: 4 hello
map插入元素的两种方法
1.insert()函数
有两种方法:第一是直接使用map方法insert();insert函数初始化需要使用stdLLpair<>,或则是初始化列表。Insert返回的类型是std::pair<迭代器,bool>,可以用std::pair::first或则std::pair::second来访问。
map的模板接受四个参数,其中后两个参数可以省略,分别是:健,值,比较类型,分配器类型,是将健映射到值上。
#include <iostream>
#include <map>
#include <utility> class data
{
public:
data(std::string val)
:mVal(val)
{}
void setValue(std::string val){mVal = val;}
std::string getValue(){return mVal;} private:
std::string mVal;
};
int main()
{
std::map<int , data> myMap; myMap = {
{1,data("abc")},
{2,data("bcd")},
{3,data("cde")},
{4,data("efg")}
};
// auto ret = myMap.insert(std::make_pair(1,data("abcd")));
// if(ret.second)
// {
// std::cout << "insert success!" << std::endl;
// }else
// {
// std::cout << "insert fail!" << std::endl;
// }
std::map<int,data>::iterator it = myMap.begin();
for(;it != myMap.end();++it)
{
std::cout << "first : " << it->first << " ";
std::cout << "second :" << it->second.getValue() << std::endl;
}
}
结果是:
first : 1 second :abc
first : 2 second :bcd
first : 3 second :cde
first : 4 second :efg
operator[] 插入元素
#include <iostream>
#include <map>
#include <utility> class data
{
public:
data():mVal(""){}
data(std::string val)
:mVal(val)
{}
void setValue(std::string val){mVal = val;}
std::string getValue(){return mVal;} private:
std::string mVal;
};
int main()
{
std::map<int,data>myMap;
myMap[] = data("sdsfmd");
myMap[] = data("dslkmd");
myMap[] = data("qpamds");
myMap[] = data("lpsmzr"); std::map<int,data>::iterator it = myMap.begin();
for(;it != myMap.end();++it)
{
std::cout << "first->" << it->first << " ";
std::cout << "second->" << it->second.getValue()<< std::endl;
} return ;
}
这里需要注意,必须提供data类的默认构造函数;因为在operator[] 的时候,他总是会提供一个i新的值对象。不管用户需不需要,这就导致了operator[] 的效率会比insert()低下。
myMap[1] = data("sdsfmd");
myMap[1] = data("dslkmd");
那么myMap[1] 的值就会变成 dslkmd
map详解<一>的更多相关文章
- Sass map详解
作为一个CSS预处理器,Sass正受到越来越多的青睐,诸如Github.Codepen.CSS-Tricks.SitePoint.w3cplus等网站采用Sass组织.管理CSS文件,Sass正在逐渐 ...
- List、Set、Map详解及区别
一.List接口 List是一个继承于Collection的接口,即List是集合中的一种.List是有序的队列,List中的每一个元素都有一个索引:第一个元素的索引值是0,往后的元素的索引值依次+1 ...
- 源映射(Source Map)详解
一.什么是源映射 为了提高性能,很多站点都会先压缩 JavaScript 代码然后上线, 但如果代码运行时出现错误,浏览器只会显示在已压缩的代码中的位置,很难确定真正的源码错误位置. 这时源映射就登场 ...
- java中list和map详解
一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedList Set下有HashSet ...
- Array.prototype.map()详解
今天在地铁上看到这样一个小例子: ["1","2","3"].map(parseInt); 相信很多人和我一样,觉得输出的结果是[1,2,3 ...
- C++ map详解
1.什么是mapmap是一个键值对容器.在处理一对一数据是,很有用. 2.map数据结构的特点map内部自建一颗红黑树,这棵树具有对数据自动排序的功能,因此,map内的数据都是按key的值排好序的. ...
- python 中的map 详解
python中的map函数应用于每一个可迭代的项,返回的是一个结果list.如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理.map()函数接收两个参数,一个是函 ...
- 集合框架学习之Collection和Map详解
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...
- Javascript中Array.prototype.map()详解
map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数.callback 每次执行后的返回值组合起来形成一个新数组. callback 函数只会在有值的索引上被调用:那些从来没被赋 ...
- JavaScript Source Map 详解
源码地址: http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html 上周,jQuery 1.9发布. 这是2.0版之前的最后 ...
随机推荐
- 设计模式入门,策略模式,c++代码实现
// test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include &quo ...
- spring boot包扫描不到controller层
启动类代码 package com.maven.demo; import org.mybatis.spring.annotation.MapperScan; import org.springfram ...
- Jquery获取radio选中的值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 如何在vscode里面调试js和node.js
一般大家调试都是在浏览器端调试js的,不过有些时候也想和后台一样在代码工具里面调试js或者node.js,下面介绍下怎样在vscode里面走断点. 1,用来调试js 一:在左侧扩展中搜索Debugge ...
- BZOJ1021 [SHOI2008]循环的债务
Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题. 不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务 ...
- js迪杰斯特拉算法求最短路径
1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574 double[,] arr = new double ...
- 转 VS Code 快捷键大全,没有更全
VS Code折腾记 - (2) 快捷键大全,没有更全 前言 VSCode的快捷键继承了一些IDE风格,有VS的身影,也有Emacs的身影..简言之,内置快捷键玩熟了,效率提高不是一点两点. VsCo ...
- 远景WEBGIS平台实现客户端SHP文件加载
远景WEBGIS平台的研发目前取得新进展,实现客户端shp文件的加载,可以不经过PC上的数据转换工具转换. 远景WEBGIS平台(RemoteGIS)是基于HTML5自主研发的新一代WEBGIS基础平 ...
- 如何在Ubuntu上安装gcc-6.3
装显卡驱动推荐 gcc 6.3 版本,其实linux上多个版本的gcc是可以共存的,需要的的时候切换就好,参加之前的博客 https://www.cnblogs.com/jins-note/p/951 ...
- MySQL 备份恢复(导入导出)单个 innodb表
MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...