c语言map的详细用法_Sirius小狼的博客-程序员宝宝_c map

技术标签: C、C++  

转载自https://www.cnblogs.com/panweiwei/p/6657583.html
一、定义

(1) map<string,   int>   Map; 
(2) 或者是:typedef   map<string,int>   Mymap; 
                  Mymap   Map; 

二、插入数据

插入数据之前先说一下pair 和 make_pair 的用法
pair是一个结构体,有first和second 两个域,可以直接访问

string key="sunquan";  
int value=123456;  
pair <string,int>  b(key, value);//这里 pair <string,string>是数据类型,后面是调带参构造方法  
cout<<b.first<<endl; 

而make_pair是返回一个pair <类型,类型> 的数据,eg:make_pair(“asa”,123456); 不过还得找个pair <string,int>类型的变量来接受返回值。
下面步入正题:

(1) Map[“abc”]=1;
(2) Map.insert(pair<string,int>(“c”,3));
(3)Map.insert(make_pair<string,int>(“d”,4));

三、修改和查找数据

(1)修改Map[“sunquan”]=11111;

(2)查找数据 用Map.find(key); 可以通过键来查。

切记不要用int value=Map[key];这样会在Map中增加这个key,而value就是缺省值(int 为0,string为空字符串)。

通过方法(2),会返回迭代器的地址,key不存在的话迭代器的值为Map.end();

四、删除元素

(1)通过key删除;

(2)通过迭代器来删除;

下面看一下详细的代码:

#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <string>  
#include <map>  
using namespace std;  
  
int main()  
{
      
    map<string,int> Map;  
    map<string,int> ::iterator it;  
    Map.insert(pair<string,int>("root",12));  
    Map.insert(pair<string,int>("scot",11));  
    for(it=Map.begin();it!=Map.end();it++)  
        cout<<it->first<<"    "<<it->second<<endl;  
    it=Map.begin();  
    Map.erase(it);//通过迭代器删除  
    string key="root";  
    Map.erase(key);//通过key删除  
      
    Map.erase(Map.begin(),Map.end());//一个迭代器,到另一个迭代器  
    //相当于  Map.clear();  
  
    for(it=Map.begin();it!=Map.end();it++)  
        cout<<it->first<<"    "<<it->second<<endl;  
    return 0;  
}

注:

map<int, string>::iterator it 是声明一个 迭代器
map<int, string> it 是 声明一个map容器

五、c++中map的一些方法

begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end()   返回指向map末尾的迭代器

equal_range()    返回特殊条目的迭代器对

erase() 删除一个元素
find()  查找一个元素
insert()插入元素
max_size()返回可以容纳的最大元素个数
size()  返回map中元素的个数
swap()  交换两个map

  get_allocator()  返回map的配置器
  key_comp()       返回比较元素key的函数
  lower_bound()    返回键值>=给定元素的第一个位置
  max_size()       返回可以容纳的最大元素个数
  rbegin()         返回一个指向map尾部的逆向迭代器
  rend()           返回一个指向map头部的逆向迭代器
  upper_bound()     返回键值>给定元素的第一个位置
  value_comp()      返回比较元素value的函数
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41824716/article/details/96890878

智能推荐

js jquery css html 动画效果_weixin_33788244的博客-程序员宝宝

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

zencart中query_factory.php中连接mysql次数_weixin_33766168的博客-程序员宝宝

query_factory.php : includes / classes / db / mysqlif (!function_exists('mysql_connect')) die ('Call to undefined function: mysql_connect(). Please install the MySQL Connector for PHP'); ...

SpringMVC-01 ( SpringMVC 概述)_小北呱的博客-程序员宝宝

第1章 SpringMVC 概述1.1SpringMVC 简介SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在 Spring3.0 后发布的。 SpringMVC 优点 基于 MVC 架构基于 MVC 架构,功能分工明确。解耦合,容易理解,上手快;使用简单。就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。作为 Spring ...

AsyncTask中各个函数详细的调用过程,初步实现异步任务_设计失的博客-程序员宝宝

原文地址AsyncTask内部类可能会产生内存泄露的问题解决上述内部类可能引起的内存泄露问题的方法•将AsyncTask或者Thread的子类作为单独的类文件,不持有Activity的强引用•将AsyncTask或者Thread的子类使用static修饰,则不会隐式持有Activity的强引用•如果是匿名内部类,则需要将其对象设置成成员属性,使用static修饰就不会隐式持有

深入理解java异常处理机制_小李讲源码的博客-程序员宝宝

转自:blog.csdn.net/hguisu/article/details/6155636写的非常好 非常的详细 1. 引子       try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不

HBase CRUD 操作指南 (三)_devalone的博客-程序员宝宝

继  HBase CRUD 操作指南 (二) 4 批处理操作 (Batch Operations)之前介绍的 API 都是应用到单一行上的操作。本节介绍另外一些 API 调用,这些调用可以批量处理跨多行的不同操作。    NOTE:    ---------    事实上,许多基于列表的操作,如 delete(List&amp;lt;Delete&amp;gt; deletes) 或 get...

随便推点

setAttribute和getAttribute_阮家友的博客-程序员宝宝

自己在写js时用到了这两个方法

Android Support升级Androidx_weixin_47851642的博客-程序员宝宝_升级androidx

1、gradle配置在gradle.properties中添加:android.useAndroidX=trueandroid.enableJetifier=true2、自动迁移dependenciesAndroid Studio菜单栏-&gt;Refactor-&gt;Migrate to AndroidX3、手动查漏补缺通过android.support进行全局搜索,将漏掉的进行替换,这个过程还是很耗时的。4、编译时最好使用AndroidStudio-&gt;Terminal-&gt;

Reading Notes-Towards Saving Money in Using Smart Contracts(ICSE 2018)_宇内虹游的博客-程序员宝宝

1. The first/lead/primary author info: paper info: ICSE 2018 &quot;Empirical Studies and Requirements&quot; section Name: Ting Chen  University/workplace: 1) Center for Cybersecurity, University of Elec...

Accumulation Degree题解_LV24twx的博客-程序员宝宝

原题传送门题目大意:有一个树形的水系,其中有nnn个节点,有n−1n-1n−1条边。xxx,yyy两点之间的容量用c(x,y)c(x,y)c(x,y)表示。nnn个点中有一个点可以作为源点,可以不断地流出水。所有度数为111的点都为汇点,水可以从该点流出。然后求以哪个点作为源点可以使得整个水系的流量最大。先来考虑暴力,我们取每个点为源点,然后这个就成了个有根树。现在以第666号节点为源点...