STL的基本使用之关联容器:map和multiMap的基本使用

时间:2022-04-16 09:42:58

STL的基本使用之关联容器:map和multiMap的基本使用

  1. 简介

    • map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序。两者不同在于map 不允许key重复,而multiSet 允许key重复
  2. 头文件 #include< map >

  3. 构造函数及析构函数 STL的基本使用之关联容器:map和multiMap的基本使用

  4. 非变动性操作函数

    • 运算符重载STL的基本使用之关联容器:map和multiMap的基本使用
    • 下标运算符STL的基本使用之关联容器:map和multiMap的基本使用
    • 查找操作函数STL的基本使用之关联容器:map和multiMap的基本使用
    • 赋值操作STL的基本使用之关联容器:map和multiMap的基本使用
    • 迭代器操作STL的基本使用之关联容器:map和multiMap的基本使用
  5. 插入删除操作STL的基本使用之关联容器:map和multiMap的基本使用

  6. 范例如下

     #include <iostream>
    #include <map>
    #include <iomanip>
    using namespace std;
    int main ()
    { #pragma mark - 基本使用
    map<int,string> c;
    c.insert(make_pair(1,"1")); c.insert(make_pair(2,"2"));
    c.insert(make_pair(4,"4")); c.insert(make_pair(5,"5"));
    c.insert(make_pair(6,"6")); cout << "lower_bound(3): " << c.lower_bound(3)->second << endl;
    cout << "upper_bound(3): " << c.upper_bound(3)->first << endl;
    cout << "equal_range(3): "
    << (c.equal_range(3).first)->first << " "
    << (c.equal_range(3).second)->first << endl;
    cout << endl;
    cout << "lower_bound(5): " << c.lower_bound(5)->first << endl;
    cout << "upper_bound(5): " << c.upper_bound(5)->first << endl;
    cout << "equal_range(5): "
    << (c.equal_range(5).first)->first << " "
    << (c.equal_range(5).second)->first << endl; c.insert(c.lower_bound(3), make_pair(3, "3"));
    // c.erase(4);
    c.erase(c.find(4));
    map<int,string>::iterator i;
    for (i = c.begin(); i!=c.end(); i++) {
    cout<<i->first<<" ";
    }
    cout<<endl; #pragma mark- 实例1:将map当做关联数组
    typedef map<string,float> StringFloatMap;
    StringFloatMap stocks; // create empty container //insert some elements
    stocks["BASF"] = 369.50;
    stocks["VW"] = 413.50;
    stocks["Daimler"] = 819.00;
    stocks["BMW"] = 834.00;
    stocks["Siemens"] = 842.20; //print all elements
    StringFloatMap::iterator pos;
    for (pos = stocks.begin(); pos != stocks.end(); ++pos) {
    cout << "stock: " << pos->first << "\t"
    << "price: " << pos->second << endl;
    }
    cout << endl;
    //boom (all prices doubled)
    for (pos = stocks.begin(); pos != stocks.end(); ++pos) {
    pos->second *= 2;
    } //print all elements
    for (pos = stocks.begin(); pos != stocks.end(); ++pos) {
    cout << "stock: " << pos->first << "\t"
    << "price: " << pos->second << endl;
    }
    cout << endl; /*rename key from "VW" to "Volkswagen"
    *-only provided by exchanging element
    */
    stocks["Volkswagen"] = stocks["VW"];
    stocks.erase("VW"); //print all elements
    for (pos = stocks.begin(); pos != stocks.end(); ++pos) {
    cout << "stock: " << pos->first << "\t"
    << "price: " << pos->second << endl;
    } #pragma mark - 实例2:将multimap当做字典
    typedef multimap<string,string> StrStrMMap;
    //create empty dictionary
    StrStrMMap dict; //insert some elements in random order
    dict.insert(make_pair("day","Tag"));
    dict.insert(make_pair("strange","fremd"));
    dict.insert(make_pair("car","Auto"));
    dict.insert(make_pair("smart","elegant"));
    dict.insert(make_pair("trait","Merkmal"));
    dict.insert(make_pair("strange","seltsam"));
    dict.insert(make_pair("smart","raffiniert"));
    dict.insert(make_pair("smart","klug"));
    dict.insert(make_pair("clever","raffiniert")); //print all elements
    StrStrMMap::iterator pos1;
    cout.setf (ios::left, ios::adjustfield);
    cout << ' ' << setw(10) << "english "
    << "german " << endl;
    cout << setfill('-') << setw(20) << ""
    << setfill(' ') << endl;
    for (pos1 = dict.begin(); pos1 != dict.end(); ++pos1) {
    cout << ' ' << setw(10) << pos1->first.c_str()
    << pos1->second << endl;
    }
    cout << endl; //print all values for key "smart"
    string word("smart");
    cout << word << ": " << endl; for (pos1 = dict.lower_bound(word);
    pos1 != dict.upper_bound(word); ++pos1) {
    cout << " " << pos1->second << endl;
    } //print all keys for value "raffiniert"
    word = ("raffiniert");
    cout << word << ": " << endl;
    for (pos1 = dict.begin(); pos1 != dict.end(); ++pos1) {
    if (pos1->second == word) {
    cout << " " << pos1->first << endl;
    }
    }

    }

  7. 运行截图STL的基本使用之关联容器:map和multiMap的基本使用

STL的基本使用之关联容器:map和multiMap的基本使用的更多相关文章

  1. STL 笔记(二) 关联容器 map、set、multimap 和 multimap

    STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可 ...

  2. STL的基本使用之关联容器:set和multiSet的基本使用

    STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet ...

  3. C&plus;&plus;关联容器&lt&semi;map&gt&semi;简单总结

    C++关联容器<map>简单总结 map提供大小可变的关联容器,基于关联键值高效检索元素值.当你处理键值对的数据是,都可以考虑使用map关联容器. 特点: 大小可变的关联容器,基于关联键值 ...

  4. 关联容器——map、set

    map类型通常被称为关联数组,与正常数组类似,不同之处在于其下标不必是整数.我们通过一个关键字而不是位置来查找值(键值对). 与之相对,set就是关键字的简单集合.当只是想知道一个值是否存在时,set ...

  5. c&plus;&plus;中关联容器map的使用

    C++关联容器<map>简单总结(转) 补充: 使用count,返回的是被查找元素的个数.如果有,返回1:否则,返回0.注意,map中不存在相同元素,所以返回值只能是1或0. 使用find ...

  6. C&plus;&plus; 之关联容器 map

    标准库定义了四种关联容器:map是其中之一(另外还有set.multimap.multiset).map的元素以键-值(key-value),在学了顺序容器之后,再学习关联容器,就比较比较好理解了. ...

  7. 关联容器&lpar;map&rpar;:支持高效查找的容器,一种键值对的集合。

    #include <iostream> #include <string> #include <map> #include <vector> using ...

  8. STL标准库-容器-map和multimap

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此ma ...

  9. STL学习笔记— —容器map和multimap

    简单介绍 在头文件<map> 中定义 namespace std { template <typename Key, typename T, typename Compare = l ...

随机推荐

  1. vs2015添加T4模版

    <#@ template language="C#" debug="false" hostspecific="true"#> & ...

  2. wpf(dispather调度者)

    一.首先为什么要有dispather? wpf程序是有一个主线程多个子线程组成的.主线程负责创建ui界面,数据接收,处理事件,子线程负责处理消耗资源较多耗时的操作.然而子线程不能直接访问主线程那么这个 ...

  3. Linux服务器---流量监控MRTG

    MRTG MRTG可以分析网络流量,但是它必须依赖SNMP协议.将收集到的数据生成HTML文件,以图片的形式展示出来 1.安装一些依赖软件 [root@localhost bandwidthd-2.0 ...

  4. Hibernate 注解中CascadeType用法汇总

    这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...

  5. ubuntu&comma;debian root密码忘记破解

    开机启动的时候在grub引导时,按住e进行启动项编辑,修改开头有linux字符及最后又ro字符的行,将ro字符改为rw single init=/bin/bash按F10键进行启动即可进入单用户模式, ...

  6. &lbrack;实战&rsqb;MVC5&plus;EF6&plus;MySql企业网盘实战&lpar;26&rpar;——音乐列表

    写在前面 本篇文章将实现,音乐列表,同样和其他列表的不同之处,在于查询条件的不同. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网 ...

  7. ORACLE判断两个日期间隔几个工作日

      CreateTime--2017年9月7日17:14:56 Author:Marydon ORACLE判断两个日期间隔几个工作日 方法:使用存储过程 /** * 判断两个日期间隔几个工作日 */ ...

  8. awk练习

    首先,了解awk的运行格式 awk '条件类型1{动作1} 条件类型2{动作2} ...'  filename 1. [root@server3 mnt]# cat passwd root x 0 0 ...

  9. Robot Framework自动化测试一(第一个脚本)

    创建测试项目                                           选择菜单栏file----->new Project Name 输入项目名称,Type 选择Di ...

  10. Linux基础tree命令

    tree命令以树状图列出文件目录结构.不过某些Linux上(Centos 6.4)没有tree命令,本文将介绍安装方法. 常用参数: tree -d 只显示目录. tree -L 1 只显示第一层目录 ...