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

  1. 简介

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

  3. 构造函数及析构函数

  4. 非变动性操作函数

    • 运算符重载
    • 下标运算符
    • 查找操作函数
    • 赋值操作
    • 迭代器操作
  5. 插入删除操作

  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的基本使用的更多相关文章

  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++关联容器<map>简单总结

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

  4. 关联容器——map、set

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

  5. c++中关联容器map的使用

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

  6. C++ 之关联容器 map

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

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

    #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. 打log

    如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...

  2. java rest接口返回不完整的json数据

    ngix配置有问题,数据量大时把部分数据给拦截了. {"userId":237,"loginName":"mingshi","us ...

  3. mysql 海量数据的存储和访问解决方案

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互 联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

  4. Socket Class中文解释

    Socket 类 .NET Framework 4.6 and 4.5 实现 Berkeley 套接字接口. 继承层次结构   System.Object   System.Net.Sockets.S ...

  5. 如何配置jdk和tomcat 转

    一.配置JDK1.解压JDK至D:\JDK1.5目录下(楼主可以自由选取目录).2.设置环境变量(右键我得电脑->属性->高级->环境变量),在系统变量中添加一个叫JAVA_HOME ...

  6. LR报-27727错误解决办法

    1.报如下错误:Action.c(4):Error-27727:Step download timeout(120 seconds) has expired when downloading reso ...

  7. cmd命令行设置环境变量

    http://blog.sciencenet.cn/blog-51026-566742.html 1.查看当前所有可用的环境变量:输入 set 即可查看. 2.查看某个环境变量:输入 “set 变量名 ...

  8. Unity3d 基于物理渲染Physically-Based Rendering之最终篇

    前情提要: 讲求基本算法 Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-B ...

  9. openstack grizzly版network网络节点安装

    版本以及源的配置和控制节点一致 1.安装完操作系统已经apt源配置完成之后,一定要执行 apt-get update root@cloud:~# mv /etc/apt/sources.list /e ...

  10. asterisk错误排查

    1.查看某个模块是否被包含在编译选项里了: See menuselect.makeoptsIf you see chan_sip in the MENUSELECT_CHANNELS option, ...