标准库map类型是一种以键-值(key-value)存储的数据类型。

  map是STL的一个关联容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

1、map特点

  map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key

  自动建立Key - value的对应。key 和 value可以是任意你需要的类型。

  根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。

  快速插入Key -Value 记录。快速删除记录,根据Key 修改value记录。遍历所有记录。

2、map对象的一些基本操作

  因此,若只是查找该元素是否存在,可以使用函数count(k),该函数返回的是k出现的次数;若是想取得key对应的值,可以使用函数find(k),该函数返回的是指向该元素的迭代器。

  第一种:用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了

  第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

  查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.

    map<char, int> p;
//map中插入元素
// method_1
p.insert(make_pair('a', ));
p.insert(make_pair('b', ));
// method_2
p.insert(pair<char, int>('c', ));
p.insert(pair<char, int>('d', ));
//method_3
p.insert(map<char, int>::value_type('e', ));
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include <vector>
#include<string>
#include<map>
using namespace std; int main()
{
map<char, int> p;
//map中插入元素
p.insert(make_pair('a',));
p.insert(make_pair('c', ));
p.insert(make_pair('b', ));
//采用下标的方法读取map中元素时,若map中不存在该元素,则会在map中插入。
//p['y'] = 17;
//p['f'] = 11; map<char, int>::iterator it;
for (it = p.begin(); it != p.end(); it++)
cout << (*it).first << " " << (*it).second << endl; /*用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,
由于map的特性,一对一的映射关系,
就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了*/
if (p.count('b'))
{
//返回出现次数,0或者1.
cout << p.count('b') << endl;
} //用find函数来定位数据出现位置,它返回的一个迭代器
map<char, int>::iterator iter;
iter = p.find('b');
if (iter != p.end())
cout << "Find, the value is " << (*iter).second << endl;
else
cout << "Do not Find" << endl; system("pause");
return ;
}

  遍历map中的内容:使用迭代器的方法、使用指针的方法

map<string, int>::iterator iter;
for (iter = name_score_map.begin(); iter != name_score_map.end(); ++iter) {
cout << (*iter).first << endl;
}
for (const auto& iter : name_score_map)
cout << iter.first << "\t" << iter.second << endl;

  删除元素方法。

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include <vector>
#include<string>
#include<map>
using namespace std; int main()
{
map<char, int> p;
//map中插入元素
p.insert(make_pair('a',));
p.insert(make_pair('c', ));
p.insert(make_pair('b', ));
//采用下标的方法读取map中元素时,若map中不存在该元素,则会在map中插入。
//p['y'] = 17;
//p['f'] = 11; map<char, int>::iterator it;
for (it = p.begin(); it != p.end(); it++)
cout << (*it).first << " " << (*it).second << endl; //如果你要演示输出效果,请选择以下的一种,你看到的效果会比较好
//如果要删除1,用迭代器删除
map<char, int>::iterator iter;
iter = p.find();
p.erase(iter);
//如果要删除1,用关键字删除
int n = p.erase();//如果删除了会返回1,否则返回0
//用迭代器,成片的删除 一下代码把整个map清空
p.erase(p.begin(), p.end());
//成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合
//自个加上遍历代码,打印输出吧 system("pause");
return ;
}
equal_range的用法
   map<char, int> p;
//map中插入元素
// method_1
p.insert(make_pair('a', ));
p.insert(make_pair('a', ));
// method_2
p.insert(pair<char, int>('a', ));
p.insert(pair<char, int>('a', ));
//method_3
p.insert(map<char, int>::value_type('a', )); //equal_range
pair<map<char, int>::iterator, map<char, int>::iterator> mypair = p.equal_range('a');
if (mypair.first != p.end())
{
cout << mypair.first->first << "\t" << mypair.first->second << endl;
}
else
{
cout << "第一个迭代器 >=c 的位置不存在" << endl;
} if (mypair.second != p.end())
{
cout << mypair.second->first << "\t" << mypair.second->second << endl;
}
else
{
cout << "第二个迭代器 >c 的位置不存在" << endl;
}

   输出结果:(由于不存在大于 a的迭代器,所以第二个找不到)

C++(十一)— map的插入、查找、删除的更多相关文章

  1. HDU 5687 字典树插入查找删除

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...

  2. JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能

    主要内容:  JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十 ...

  3. 二叉查找树的查找、插入和删除 - Java实现

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 作者: yangecnu(yangecnu's Blog on ...

  4. 二叉搜索树Java实现(查找、插入、删除、遍历)

    由于最近想要阅读下 JDK1.8 中 HashMap 的具体实现,但是由于 HashMap 的实现中用到了红黑树,所以我觉得有必要先复习下红黑树的相关知识,所以写下这篇随笔备忘,有不对的地方请指出- ...

  5. 算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)

    在上一篇博客中,我们主要介绍了四种查找的方法,包括顺序查找.折半查找.插入查找以及Fibonacci查找.上面这几种查找方式都是基于线性表的查找方式,今天博客中我们来介绍一下基于二叉树结构的查找,也就 ...

  6. 【算法】【python实现】二叉搜索树插入、删除、查找

    二叉搜索树 定义:如果一颗二叉树的每个节点对应一个关键码值,且关键码值的组织是有顺序的,例如左子节点值小于父节点值,父节点值小于右子节点值,则这棵二叉树是一棵二叉搜索树. 类(TreeNode):定义 ...

  7. arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

    风过无痕 原文  arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新 深入理解游标Cursors,实现数据的快速查找,插入,删除,更新 1.查找数据Search Cu ...

  8. 二叉查找树(查找、插入、删除)——C语言

    二叉查找树 二叉查找树(BST:Binary Search Tree)是一种特殊的二叉树,它改善了二叉树节点查找的效率.二叉查找树有以下性质: (1)若左子树不空,则左子树上所有节点的值均小于它的根节 ...

  9. AVL树(查找、插入、删除)——C语言

    AVL树 平衡二叉查找树(Self-balancing binary search tree)又被称为AVL树(AVL树是根据它的发明者G. M. Adelson-Velskii和E. M. Land ...

随机推荐

  1. 一直没有敢发的NOIP2018游记

    一直没有敢发的NOIP2018游记 NOIP2018游记 教练说知足是最好的,尽吾志而也不能及者,可以无悔矣.在这次考试中的表现令我还是十分满意的.(笑) D1 T0 我配置背得感觉很好,我考场上直接 ...

  2. Matlab mser(最大极值稳定区域)

    在Matlab R2013a 和R2014a中已经实现MSER特征的提取. 一.函数detectMSERFeatures 输入的是M*N的灰度图片.可以指定阈值刻度,区域范围,感兴趣区域等参数. 输出 ...

  3. ASP.NET MVC string赋值Html格式在显示View问题总结

    ViewBag.Content = "<p>你好</p>"; string 类型的赋值一个 "<h1>你好</h1>&qu ...

  4. javascript高级语法二

    一.BOM对象 1.什么是BOM对象? BOM是浏览器对象模型,核心对象就是window,所有浏览器都支持 window 对象.一个html文档对应一个window对象,主要功能是控制浏览器窗口的, ...

  5. $Android中日期和时间选择器的实现

    创建日期或时间选择窗口需要弹出Dialog的时候,Activity类的showDialog方法已经弃用了,而推荐使用的是DialogFragment,本文总结一下其具体用法. (一)日期选择器 1.创 ...

  6. springboot——数据层访问搭建 集成Duid连接池

    springboot中默认是使用的tomcat的连接池,如果我们想要第三方的连接池,我们这么配置呢? 首先在application.yml文件中注释掉之前数据库的配置,重新用druid的方式配置: # ...

  7. 【HackerRank】Service Lane

     Calvin is driving his favorite vehicle on the 101 freeway. He notices that the check engine light o ...

  8. Java zip 压缩 文件夹删除,移动,重命名,复制

    FileUtil.java import java.io.*; import java.util.List; import java.util.zip.ZipEntry; import java.ut ...

  9. crm销售管理系统一

    一.环境配置 1.首先配置pip,环境变量配置 pip 9.0.1 from c:\users\administrator\envs\crm\lib\site-packages (python 3.6 ...

  10. 【简单dp】poj 1458 最长公共子序列【O(n^2)】【模板】

    最长公共子序列可以用在下面的问题时:给你一个字符串,请问最少还需要添加多少个字符就可以让它编程一个回文串? 解法:ans=strlen(原串)-LCS(原串,反串); Sample Input abc ...