C++ STL标准库 《map容器详解》

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: C++ STL标准库 《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);//列表移除
 }
相关文章
|
14天前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
50 6
|
27天前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
81 10
|
27天前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
40 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
14天前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
54 5
|
14天前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
37 1
|
27天前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
44 5
|
27天前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
43 2
|
2月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
33 6
|
2月前
|
缓存 网络协议 Linux
超级好用的C++实用库之套接字
超级好用的C++实用库之套接字
29 1
|
10天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
31 5