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. C++中Reference与指针(Pointer)的使用对比

    整理日: 2015年3月18日 引用(reference)和指针(pointer)是学C++过程中最令人头疼的问题,常常不知道什么时候用哪个合适,又常常弄混.找到Dan Saks的这篇文章,讲的很清楚 ...

  2. 【HTTP】Speed and Mobility: An Approach for HTTP 2.0 to Make Mobile Apps and the Web Faster

    This week begins face to face meetings at the IETF on how to approach HTTP 2.0 and improve the Inter ...

  3. Count The Pairs

    hdu4750:http://acm.hdu.edu.cn/showproblem.php?pid=4750 题意:给你一个带权无向图,然后让你求这样的点对s,t,使得s--t的所有路径上的最大的边的 ...

  4. C API向MySQL插入批量数据的快速方法——关于mysql_autocommit

    MySQL默认的数据提交操作模式是自动提交模式(autocommit).这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行.我们可以通过设置autocommit的值改变是否是自 ...

  5. RemixOS Player 让用户在 Windows 上运行 Android App

    http://www.oschina.net/news/77154/remixos-player-windows-andriod-app

  6. Volatile总结

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  7. poj3167

    这道题是一道kmp的扩展版的好题一串匹配一串很容易想到kmp,但是这里的匹配要求的是两个串的名次相同显然名次是会变的,为了方便,我们可以换一种表达对于两个等长的串的相同位置,名次相等就是在它之前比它小 ...

  8. java桌面项目打包_by icewee_写得太棒了,直接转载了

    前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...

  9. MyEclipse中导入Spring 4.0源码

    http://www.cnblogs.com/shi-blog/p/4132183.html

  10. 合并两个rs结果输出

    <%Const SqlDatabaseName = "DNN625"       ' 数据库名字' Const SqlPassword     = "123456& ...