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. hello,world不使用ARC

    main.m // // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright (c) 2014年 lishujun. ...

  2. 运行从别处复制过来的linux可执行程序

    1, 首先ldd看看缺不缺so文件,如果不缺可忽略下面的文字,直接执行 2, 先看看缺的这些库在系统上有没有,这些库可通过安装开发包,第三方软件进行安装 3, 找到可能会包含这些库的可执行程序,ldd ...

  3. ZeroBraneStudio之支持远程调试

    打开ZBS后,如果需要远程调试得先开启调试服务器:Project->Start Debugger Server 打开之后就可以编辑文件进行测试了.示例代码如下: local ZBS = 'D:/ ...

  4. [BZOJ 1106] [POI2007] 立方体大作战tet 【树状数组】

    题目链接:BZOJ - 1106 题目分析 从1到2n枚举每一个位置. 如果枚举到某一个数,这个数已经是第二次出现,那么就看它和第一次出现的位置之间有多少数还没有被匹配,有多少没有匹配的就要进行多少次 ...

  5. 【转】不同VLAN之间相互通信及VTP、STP、EtherChannel概念

    厘清最后一个概念. 转了网上两个相关帖子: http://www.net130.com/CMS/Pub/Tech/tech_zh/2009_03_12_97386_3.htm http://blog. ...

  6. 【POJ2396】Budget(上下界网络流)

    Description We are supposed to make a budget proposal for this multi-site competition. The budget pr ...

  7. java4中创建内对象的方法

    在java程序中,对象可以被显式地或者隐式地创建.四种显式的创建对象的方式:     ● 用new语句创建对象     ● 运用反射手段,调用java.lang.Class 或者 java.lang. ...

  8. R语言 逐步回归分析

    逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来达到删除或增加变量的目的. R语言中用于逐步回归分析的函数 step()    drop1()     add1() #1.载 ...

  9. c#后台验证

    #region 后台验证 panda /// 验证电话号码的主要代码如下: public bool IsTelephone(string str_telephone) { return System. ...

  10. MySQL安装没有弹出配置向导

    安装MySQL过程中一切都正常只是没有弹出MySQL配置向导对话框,即出现"launch the MySQL Instance Configuration Wizard" fini ...