zoukankan      html  css  js  c++  java
  • C++ map用法

     由于map和其他STL中有相同性,因此可以用在其他的容器中

    由于习惯原因下文中将通常说的Keys说成“搜索项”

    寻找在map中的当前值的函数


    .find()函数

    // map::find
    #include <iostream>
    #include <map>
    using namespace std;
    int main ()
    {
      std::map<char,int> mymap;
      std::map<char,int>::iterator it;
    
      mymap['a']=50;
      mymap['b']=100;
      mymap['c']=150;
      mymap['d']=200;
    
    cout<<mymap.find('b')->second<<endl ;
    cout<<mymap.find('f')->first<<' '<<mymap.find('f')->second<<endl;//如果没有则返回的是一个未知的字符和地址,也就是不确定的
    if(mymap.find('f')->first=='f')
    cout<<' '<<mymap.find('f')->second<<endl;
    return 0;
    }
    
    


    寻找map变量的起始地址

    .begin()

    (map中最基本的函数)

    注意begin()函数是始终指向开始的即使是删掉第一个值(详见erase())

    // map::begin/end
    #include <iostream>
    #include <map>
    
    int main ()
    {
      std::map<char,int> mymap;
      std::map<char,int>::iterator it;
    
      mymap['b'] = 100;
      mymap['a'] = 200;
      mymap['c'] = 300;
    
      // show content:
      std::map<char,int>::iterator it;
      for (it=mymap.begin(); it!=mymap.end(); ++it)
        std::cout << it->first << " => " << it->second << '
    ';
      return 0;
    }
    
    
    


     

    清空map所有变量函数

    clear()

    清空所有的序列,长度变为0

    <em>#include <iostream>
    #include <map>
    using namespace std;
    int main ()
    {
      std::map<char,int> mymap;
    
      mymap['x']=100;
      mymap['y']=200;
      mymap['z']=300;
    mymap.clear();
    cout<<mymap.size()<<endl;
    return 0;
    }
    
    </em>


    运行结果:

    0

    查找在map变量中是否存在当前值

    count()

    由于在map中所有的索引项都不存在重复的现象,所以此函数只能返回1(能查找到)和0(未查找到)
    此函数和find()的区别;因为find返回的可以是找到的索引项,也可以是索引项所含的数据,但是
    在count中不可以这样用

    //map::count
    #include <iostream>
    #include <map>
    using namespace std;
    int main ()
    {
      std::map<char,int> mymap;
      char c;
    
      mymap ['a']=101;
      mymap ['c']=202;
      mymap ['f']=303;
    
      for (c='a'; c<'h'; c++)
      {
          cout << c;
        if (mymap.count(c)>0)
          cout << " is an element of mymap.
    ";
        else
          cout << " is not an element of mymap.
    ";
      }
    
      return 0;
    }
    
    
    

    运行结果:

    a is an element of mymap.
    b is not an element of mymap.
    c is an element of mymap.
    d is not an element of mymap.
    e is not an element of mymap.
    f is an element of mymap.
    g is not an element of mymap.


     

    查找reverse倒置排序后的首地址函数

    rbegin()

    返回的是在revese中的首地址

    // map::rbegin/rend
    #include <iostream>
    #include <map>
    
    int main ()
    {
      std::map<char,int> mymap;
    
      mymap['x'] = 100;
      mymap['y'] = 200;
      mymap['z'] = 300;
    
      // show content:
      std::map<char,int>::reverse_iterator rit;
      for (rit=mymap.rbegin(); rit!=mymap.rend(); ++rit)
        std::cout << rit->first << " => " << rit->second << '
    ';
    
      return 0;
    }
    
    


    运行结果:

    z => 300
    y => 200
    x => 100

    判断map变量是否为空函数

    .empty() 返回的是该map是否为空,空返回1;否则返回0

    // map::empty
    #include <iostream>
    #include <map>
    using namespace std;
    int main ()
    {
      std::map<char,int> mymap;
    
      mymap['a']=10;
      mymap['b']=20;
      mymap['c']=30;
    
      while (!mymap.empty())
      {
        std::cout << mymap.begin()->first << " => " << mymap.begin()->second << '
    ';
        mymap.erase(mymap.begin());
      }
      cout<<mymap.size();//长度变为零
      return 0;
    }

    运行结果:

    a => 10
    b => 20
    c => 30
    0

    查找结束位置函数

    end()

    // map::begin/end
    #include <iostream>
    #include <map>
    
    int main ()
    {
      std::map<char,int> mymap;
    
      mymap['b'] = 100;
      mymap['a'] = 200;
      mymap['c'] = 300;
    
      // show content:
      for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
        std::cout << it->first << " => " << it->second << '
    ';
    
      return 0;
    }

    运行结果:

    a => 200
    b => 100
    c => 300

    erase()

    擦除的可以是一个元素,也可以是一个范围

    // erasing from map
    #include <iostream>
    #include <map>
    using namespace std;
    int main ()
    {
      std::map<char,int> mymap;
      std::map<char,int>::iterator it;
    
      // insert some values:
      mymap['a']=10;
      mymap['b']=20;
      mymap['c']=30;
      mymap['d']=40;
      mymap['e']=50;
      mymap['f']=60;
    
      it=mymap.find('b');
      mymap.erase (it);                   // erasing by iterator
    
      mymap.erase ('c');                  // erasing by key
    
      it=mymap.find ('e');
      mymap.erase ( it, mymap.end() );    // erasing by range
    
      // show content:
      for (it=mymap.begin(); it!=mymap.end(); ++it)
        std::cout << it->first << " => " << it->second << '
    ';
      cout<<mymap.size();//仅剩下a和d所在的两个数了
      return 0;
    }
    

    运行结果:
    a => 10
    d => 40
    2

    插入函数

    insert()

    函数

    #include <iostream>
    #include <map>
    using namespace std;
    int main ()
    {
       map<char,int> mymap;
    
      // 第一种插入方式(只插入单个值)                                                                                                                 mymap.insert ( pair<char,int>('a',100) );
      mymap.insert ( pair<char,int>('z',200) );
     
       
    //下面是用来显示insert函数的返回值和插入成功与否的判断  
    //如果只是研究插入方法的话,此段可以不研究   
    pair< map<char,int>::iterator,bool > ret;//此处是设置insert的返回类型  
    ret = mymap.insert (  pair<char,int>('z',500) );//可以将该处的'z'修改成'x',观察当插入成功时候的返回值 
    if (ret.second==false)//如果是已经存在的就返回0 
    {    
     cout << "element '"<<ret.first->first<<"' already existed";  
     cout << " with a value of " << ret.first->second << '
    ';  
    }   
    else  
    {     
     cout << "element '"<<ret.first->first<<"' creat successfully";  
     cout << " with a value of " << ret.first->second << '
    ';   
    }
    
    
      // 第二种插入方式 (插入到指定位置):
       map<char,int>::iterator it = mymap.begin();
      mymap.insert (it,  pair<char,int>('b',300));  // max efficiency inserting
      mymap.insert (it,  pair<char,int>('c',400));  // no max efficiency inserting
      // 第三种插入方式(插入一定范围的数值)                                                                                                         map<char,int> anothermap;
      anothermap.insert(mymap.begin(),mymap.find('c'));//mymap.find('c')插入的末地址,但是插入时不包括改地址
     
    //第四种插入方式(插入单个值)
      mymap.insert(map<char,int>::value_type('x',20000000));
    //第五种 (不是经常用的插入方式)(只插入单个值)
          mymap['f']=100000000; 
      // showing contents:
       cout << "mymap contains:
    ";
      for (it=mymap.begin(); it!=mymap.end(); ++it)
         cout << it->first << " => " << it->second << '
    ';
    
       cout << "anothermap contains:
    ";
      for (it=anothermap.begin(); it!=anothermap.end(); ++it)
         cout << it->first << " => " << it->second << '
    ';
    
      return 0;
    }
    



     

    运行结果:

    element 'z' already existed with a value of 200
    mymap contains:
    a => 100
    b => 300
    c => 400
    f => 100000000
    x => 20000000
    z => 200
    anothermap contains:
    a => 100
    b => 300

    测试map长度的函数

    size()

    运行结果:

    // map::size
    #include <iostream>
    #include <map>
    
    int main ()
    {
      std::map<char,int> mymap;
      mymap['a']=101;
      mymap['b']=202;
      mymap['c']=302;
    
      std::cout << "mymap.size() is " << mymap.size() << '
    ';
    
      return 0;
    }
    


     

    3

    max_size()

    // map::max_size
    #include <iostream>
    #include <map>
    
    int main ()
    {
      int i;
      std::map<int,int> mymap;
    
      if (mymap.max_size()>1000)
      {
        for (i=0; i<1000; i++) mymap[i]=0;
        std::cout << "The map contains 1000 elements.
    ";
      }
      else std::cout << "The map could not hold 1000 elements.
    ";
    
      return 0;
    }
    


     

    附加map的特点:

    入过出现在容器map中不存在的索引项,则自动生成一个新的空间

    // accessing mapped values
    #include <iostream>
    #include <map>
    #include <string>
    using namespace std;
    int main ()
    {
      map<char,string> mymap;
    
      mymap['a']="an element";
      mymap['b']="another element";
      mymap['c']=mymap['b'];
      cout << "mymap now contains " << mymap.size() << " elements.
    ";
      cout << "mymap['a'] is " << mymap['a'] << '
    ';cout << "mymap['b'] is " << mymap['b'] << '
    ';
      cout << "mymap['c'] is " << mymap['c'] << '
    ';
      cout << "mymap['d'] is " << mymap['d'] << '
    ';//注意本行输出结果与find找不到时的返回值的不同这个返回的是空字符串
      cout << "mymap now contains " << mymap.size() << " elements.
    ";
      if(mymap['d']=="")         //返回的是空字符串
        cout<<"This is an empty string";
      return 0;
    }
    
    

    未完待续

     参考网站:http://www.cplusplus.com/reference/map/map/max_size/

  • 相关阅读:
    在Android中如何获取视频的第一帧图片并显示在一个ImageView中
    利用MsChart控件绘制多曲线图表 z
    国外成熟的程序交易系统的思路 z
    稳健获利
    用vmware安装gho文件
    数学之美 zt
    大型邮箱smtp服务器及端口 收集
    英语之路 zt
    C# Get Desktop Screenshot ZZ
    C#/PHP Compatible Encryption (AES256) ZZ
  • 原文地址:https://www.cnblogs.com/zswbky/p/5432117.html
Copyright © 2011-2022 走看看