zoukankan      html  css  js  c++  java
  • STL之map、multimap

    map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。

    map中key值是唯一的。集合中的元素按一定的顺序排列。元素的插入过程是按照排序规则插入,所以不能指定插入位置。

    map的具体实现采用红黑树的变体平衡二叉树的数据结构。在插入删除操作上快于vector。

    map可以直接存取key对应的value,支持[]操作符,如map[key] = value;

    multimap与map的区别:map支持唯一键值,每个键值只能出现一次,而multimap中相同键可以出现多次multimap不支持[]操作符.

     map中插入元素有三种方式:

    1 map<int,string> mapA;
    2 mapA.insert(pair<int,string>(3,"小王"));
    3 mapA.insert(map<int,string>::value_type(1,"小李"));
    4 mapA[2] = "小刘";

     .insert()方法返回值是pair<iterator,bool>

    pair<map<int,string>::iterator,bool> pairResult = mapA.insert(pair<int,string>(4,"小猪"));

     map<int,string,less<int>> mapA;//这样就是关键字升序

     1 map<int,string,greater<int>> mapA;
     2 mapA.insert(pair<int,string>(3,"小王"));
     3 mapA.insert(map<int,string,greater<int>>::value_type(1,"小李"));
     4 mapA[2] = "小刘";mapA.insert(make_pair(6,"小彭"));
     5 pair<map<int,string,greater<int>>::iterator,bool> pairResult = 
     6 mapA.insert(pair<int,string>(4,"小猪"));
     7 for (map<int,string,greater<int>>::iterator it = mapA.begin();it != mapA.end();it++)
     8 {
     9     cout<<it->second<<" ";
    10 }
    11 cout<<endl;

    以上是升序

     虽然说查找似乎有两种方法但是我只是成功了一种另一种总是有bug所以我还是只贴出来一个算了:

     1 //声明和定义
     2 struct userdevice
     3 {
     4     string m_devicename;
     5     long m_deviceid;
     6     int m_devicePopedom;
     7 };
     8 
     9 typedef multimap<string,userdevice> USERTABLE;
    10 typedef USERTABLE::const_iterator CIT;
    11 typedef pair<CIT,CIT> Rang;
    12 
    13 //主函数
    14 CIT itmset;
    15 
    16     userdevice d1,d2,d3,d4;
    17     d1.m_deviceid = 12341234;
    18     d1.m_devicename = "d1";
    19     d1.m_devicePopedom = 123;
    20 
    21     d2.m_deviceid = 23622344;
    22     d2.m_devicename = "d2";
    23     d2.m_devicePopedom = 234;
    24 
    25     d3.m_deviceid = 34513234;
    26     d3.m_devicename = "d3";
    27     d3.m_devicePopedom = 345;
    28 
    29     d4.m_deviceid = 43622344;
    30     d4.m_devicename = "d4";
    31     d4.m_devicePopedom = 456;
    32 
    33     USERTABLE m_user;
    34     m_user.insert(make_pair("liuzhimin",d1));
    35     m_user.insert(multimap<string,userdevice>::value_type("peng",d2));
    36     m_user.insert(make_pair("liuzhimin2",d3));
    37     m_user.insert(make_pair("liuzhimin2",d4));
    38 
    39 
    40     Rang range = m_user.equal_range("peng");
    41     for (CIT i = range.first;i != range.second;i++)
    42     {
    43         cout<<i->second.m_deviceid<<','
    44             <<i->second.m_devicename.c_str()<<','
    45             <<i->second.m_devicePopedom<<endl;
    46     }
  • 相关阅读:
    从头学Android之Android布局管理:LinerLayout线性布局
    Android onTouch事件传递机制
    android开源项目和框架
    <hdu
    <hdu
    <poj
    <poj
    <hdu
    <hdu
    <hdu
  • 原文地址:https://www.cnblogs.com/XCoderLiu/p/3521787.html
Copyright © 2011-2022 走看看