map multimap

map,multimap key-value对容器,也叫字典,map中不能存放key相同的元素,而multimap可以,容器中元素默认按升序排序

map multimap的相关操作

m.insert(map<T1,T2>::value_type(a1,a2));
m.insert(make_pair(a1,a2));
m.insert(pair<T1,T2>(a1,a2));
a[a1]=a2;                                //multimap不能用这种方式
m.find(val)              //查找元素,返回迭代器
m.erase(key)             //通过key删除元素
m.erase(it)              //通过迭代器删除元素
m.erase(it1,it2)         //删除迭代器范围内的元素

学习代码


#include <iostream>
#include <map>
#include <string>

using namespace std;

int main()
{
    map<int, string> a;  //键不能重复,默认按升序排序
    multimap<int, string> ma;
    a.insert(map<int, string>::value_type(1, "One"));
    a.insert(map<int, string>::value_type(1, "one"));
    a.insert(map<int, string>::value_type(2, "Two"));
    a.insert(map<int, string>::value_type(3, "Three"));
    a.insert(make_pair(-1, "Minus One"));
    a.insert(pair<int, string>(1000, "One Thousand"));
    a[1000000] = "One Million";//multimap不能用这种方式

    cout << "最简单那的查找" << endl;
    cout << a[3] << endl;

    cout << "map里一共有" << a.size() << "个kye-value对数据" << endl;
    map<int, string>::const_iterator it = a.begin();
    while (it != a.end())
    {
        cout << "key" << it->first ;
        cout << " value" << it->second.c_str();
        cout << endl;
        ++it;

    }

    ma.insert(multimap<int, string>::value_type(3, "Three"));
    ma.insert(multimap<int, string>::value_type(45, "Forty Five"));
    ma.insert(make_pair(-1, "Minus one"));
    ma.insert(pair<int, string>(1000, "One Thousand"));
    ma.insert(pair<int, string>(1000, "One Thousand"));

    multimap<int, string>::const_iterator itm = ma.begin();
    while (itm != ma.end())
    {
        cout << "key:" << itm->first;
        cout << " value:" << itm->second.c_str();
        cout << endl;
        ++itm;
    }
    cout << "multimap里有" << ma.count(1000) << "个1000" << endl;

    multimap<int, string>::const_iterator fi;
    fi=ma.find(45);
    if (fi != ma.end())
    {
        cout << "找到了" << fi->first<<"  "<<fi->second.c_str()<< endl;
    }
    else
    {
        cout << "没找到" << endl;
    }

    fi = ma.find(1000);
    if (fi != ma.end())
    {
        cout << "找到了1000" << endl;
        size_t n = ma.count(1000);
        for (size_t i = 0; i < n; i++)
        {
            cout << "key:" << fi->first << "value:" << fi->second.c_str() << endl;
            ++fi;
        }
    }
    else {
        cout << "没找到" << endl;
    }

    if (ma.erase(-1) > 0)
        cout << "删除-1成功" << endl;

    multimap<int, string>::iterator itm2 = ma.find(45);
    if (itm2 != ma.end())
    {
        ma.erase(itm2);
        cout << "删除45成功" << endl;
    }

    ma.erase(ma.lower_bound(1000), ma.upper_bound(1000));//迭代器

    getchar();
    return 0;

}

C++ map multimap的更多相关文章

  1. STL中的map/multimap小结

    (1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)n ...

  2. STL:map/multimap用法详解

    map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...

  3. iBinary C++STL模板库关联容器之map/multimap

    目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...

  4. 09--STL关联容器(map/multimap)

    一:map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...

  5. c/c++ 标准库 map multimap元素访问

    标准库 map multimap元素访问 一,map,unordered_map下标操作 下标操作种类 功能描述 c[k] 返回关键字为k的元素:如果k不在c中,添加一个关键字为k的元素,并对其初始化 ...

  6. STL之六:map/multimap用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap 使用map/multimap之前要加入头文件# ...

  7. STL之map&multimap使用简介

    map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...

  8. STL——容器(Map & multimap)的删除

    Map & multimap 的删除 map.clear();           //删除所有元素 map.erase(pos);      //删除pos迭代器所指的元素,返回下一个元素的 ...

  9. STL——容器(Map & multimap)的大小

    1. Map & multimap 的大小 map.size();     //返回容器中元素的数目 map.empty();//判断容器是否为空, 容器中有内容将会返回 false 代码示例 ...

随机推荐

  1. HDU 3584 Cube(三位树状数组)

    Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submi ...

  2. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

    前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...

  3. javascript中原型链与instanceof 原理

    instanceof:用来判断实例是否是属于某个对象,这个判断依据是什么呢? 首先,了解一下javascript中的原型继承的基础知识: javascript中的对象都有一个__proto__属性,这 ...

  4. CentOS7修改网卡名称,禁用ipv6

    有时候新装的CentOS7系统网卡默认名称是eno16777736,为方便改成传统eth0 修改网络配置文件 # cd /etc/sysconfig/network-script/ # vim ifc ...

  5. 实现基于LVS负载均衡集群的电商网站架构

    背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...

  6. 创建并在项目中调用SQLSERVER存储过程的简单示例

    使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...

  7. 调试利器:SSH隧道

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文作者:ivweb 吴浩麟 原文出处:IVWEB社区 未经同意,禁止转载 在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需 ...

  8. 《java.util.concurrent 包源码阅读》22 Fork/Join框架的初体验

    JDK7引入了Fork/Join框架,所谓Fork/Join框架,个人解释:Fork分解任务成独立的子任务,用多线程去执行这些子任务,Join合并子任务的结果.这样就能使用多线程的方式来执行一个任务. ...

  9. C/S架构自动化测试入门

    所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...

  10. redis 梳理笔记(一)

    一 redis 数据格式 短连接 长连接pconnect tcp协议 交互数据格式 交互采用特殊的格式 \r\n 1."+"号开头表示单行字符串的回复      set aa aa ...