• STL --> map容器


    map容器

    一、map简介

      map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。

     

    二、map的功能

    自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
    根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
    快速插入Key - Value 记录。
    快速删除记录
    根据Key 修改value记录。
    遍历所有记录。


    三、使用map

    使用map得包含map类所在的头文件:

    #include <map>   //注意,STL头文件没有扩展名.h

    map对象是模板类,需要关键字和存储对象两个模板参数:

     map<string, int>   my_Map; 
     或者是:
    typedef map<string, int>   MY_MAP; 
     MY_MAP  my_Map;
     

    四、插入元素

      map<string,  int>   my_Map; 
      (1)   my_Map["a"]   =   1; 
      (2)   my_Map.insert(map<string,   int>::value_type("b",2)); 
      (3)   my_Map.insert(pair<string,int>("c",3)); 
      (4)   my_Map.insert(make_pair<string,int>("d",4)); 

    五、查找和修改元素

     (1)   int i = my_Map["a"]; 
           my_Map["a"] = i; 

    (2)   MY_MAP::iterator my_Itr; 
           my_Itr.find("b"); 
           int j = my_Itr->second; 
           my_Itr->second = j;

    不过注意,键本身是不能被修改的,除非删除。通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator->first 和 iterator->second 分别代表关键字和存储的数据。

     六、删除元素

      (1)   my_Map.erase(my_Itr); 

      (2)   my_Map.erase("c");

    注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。

    七、迭代数据 

     for(my_Itr=my_Map.begin();  my_Itr!=my_Map.end(); ++my_Itr)
    { }

    八、其它方法 

      my_Map.size()               返回元素数目 
      my_Map.empty()       判断是否为空 
      my_Map.clear()           清空所有元素 

    可以直接进行赋值和比较:=,   >,   >=,   <,   <=,   !=   等等

    九、基本操作函数:

    C++ Maps是一种关联式容器,包含“关键字/值”对

          begin()                   //返回指向map头部的迭代器
          clear()                  //删除所有元素
          count()                   //返回指定元素出现的次数
          empty()                   // 如果map为空则返回true
          end()                     //返回指向map末尾的迭代器
          equal_range()             //返回特殊条目的迭代器对
          erase()                   //删除一个元素
          find()                    //查找一个元素
          get_allocator()           //返回map的配置器
          insert()                  //插入元素
          key_comp()                //返回比较元素key的函数
          lower_bound()             //返回键值>=给定元素的第一个位置
          max_size()                //返回可以容纳的最大元素个数
          rbegin()                  //返回一个指向map尾部的逆向迭代器
          rend()                    //返回一个指向map头部的逆向迭代器
          size()                    //返回map中元素的个数
          swap()                    //交换两个map
          upper_bound()             //返回键值>给定元素的第一个位置
          value_comp()              //返回比较元素value的函数   

    例子:

    //遍历:
    map<string,CAgent>::iterator iter;
     for(iter = m_AgentClients.begin(); iter != m_AgentClients.end(); ++iter)
     {
       if(iter->first=="8001"  {
         this->SendMsg(iter->second.pSocket,strMsg);//iter->first
       }
     }
    
    //查找:
    map<string,CAgent>::iterator iter=m_AgentClients.find(strAgentName);
     if(iter!=m_AgentClients.end())//有重名的  {
     }
     else //没有{
     }
    
    //元素的个数
    if (m_AgentClients.size()==0)
    
    //删除
    map<string,CAgent>::iterator iter=m_AgentClients.find(pSocket->GetName());
     if(iter!=m_AgentClients.end())
     {
    
         m_AgentClients.erase(iter);//列表移除
     }
  • 相关阅读:
    随机-byte编码
    dataframe骚操作,待续
    oracle中的rowid
    java提高篇-----理解java的三大特性之继承
    staruml使用教程
    黑马程序员:HTML习题1
    Cocos2d-x-->CCSprite 动画
    地址栏传参中文乱码详解
    Qt学习第二天
    Lync 2010 升级到2013 之部署2013前端服务器!
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4565523.html
Copyright © 2020-2023  润新知