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);//列表移除
 }
原文地址:https://www.cnblogs.com/jeakeven/p/4565523.html