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版之前的最后 ...
随机推荐
- HotSpot 虚拟机中对象的创建过程
- Oracle数据库RowId
RowId是什么? RowId是根据每一行数据的物理信息地址编码而成的一个位列,利用RowId可以快速定位到某一行. Oracle数据库编辑数据必须查出RowId,可以根据如下语句查询: select ...
- django框架中form表单Post方法无法提交 Forbidden (403) CSRF verification failed. Request aborted.
问题如图: 解决方法: 在视图函数中引入并使用装饰器 from django.views.decorators.csrf import csrf_exempt @csrf_exempt
- 关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)
最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结. 效果图: 1.基础配置 options的配置如下: { tooltip: { trigger: 'item', triggerO ...
- Java常见异常类
NullpointException(空指针异常)ClassNotFoundException(类找不到异常)ClassCastException(类型转换异常)IllegalArgumentExce ...
- bootstrap学习笔记细化(表格)
主要属性: 全屏宽度带水平线的表格 .table 带边框的表格 .table-bordered 条纹状表格 .table-striped 悬停变色表格 .table-hover 紧凑风格表格 .tab ...
- line-height属性的深入了解
line-height属性的细节与大多数CSS属性不同,line-height支持属性值设置为无单位的数字.有无单位在子元素继承属性时有微妙的不同. 语法line-height: normal | & ...
- HttpStatus
/* * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Vers ...
- 深入理解HashMap和concurrentHashMap
原文链接:https://segmentfault.com/a/1190000015726870 前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇 ...
- Django基础之form操作
Form表单的功能 自动生成HTML表单元素 检查表单数据的合法性 如果验证错误,重新显示表单(数据不会重置) 数据类型转换(字符类型的数据转换成相应的Python类型) Form相关的对象包括 Wi ...