STL 之 map

本文详细介绍了C++中Map容器的使用方法,包括基本构造、数据插入、查找、修改、删除、迭代等操作,并提供了实例代码进行演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 map的基本操作函数:

      C++Maps是一种关联式容器,包含关键字/提供了很好一对一的关系,比如学生学号和姓名之间的查询。这就是一个Map 储存类型。

  1   头文件    #include   <map> 

  2   定义 

  map<string,   int>   my_Map; 

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


  3   插入数据 
  (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("d",4)); 
  
  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; 
  不过注意,键本身是不能被修改的,除非删除。 
  
  5   删除数据 
  (1)   my_Map.erase(my_Itr); 
  (2)   my_Map.erase("c"); 
  还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。 
  
  6   迭代数据 
  for   (my_Itr=my_Map.begin();   my_Itr!=my_Map.end();   ++my_Itr)   {} 
  
  7   其它方法 
  my_Map.size()               返回元素数目 
  my_Map.empty()       判断是否为空 
  my_Map.
      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的函数

1. map最基本的构造函数;
   map<string , int >mapstring;         map<int,string >mapint;
   map<sring, char>mapstring;         map<char ,string>mapchar;
   map<char ,int>mapchar;            map<int,char >mapint

2. map添加数据;

   map<int ,string> maplive;  
   1.maplive.insert(
pair<int,string>(102,"aclive"));
   2.maplive.insert(
map<int,string>::value_type(321,"hai"));
   3, maplive[112]="April";//map
中最简单最常用的插入添加!
3
map中元素的查找:

   find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。        

   map<int ,string>::iterator l_it;; 
   
l_it=maplive.find(112);
   if(l_it==maplive.end())
                cout<<"wedo not find 112"<<endl;
   else cout<<"wo find112"<<endl;
4,map
中元素的删除:
   
如果删除112
   map<int ,string >::iterator l_it;;
   l_it=maplive.find(112);
   if(l_it==maplive.end())
        cout<<"wedo not find 112"<<endl;
   else  
maplive.erase(l_it);  //delete 112;
5,map
swap的用法:
  Map
中的swap不是一个容器中的元素交换,而是两个容器交换;
  For example

  #include <map>
  #include <iostream>

  using namespace std;

  int main( )
  {
      map <int,int> m1, m2, m3;
      map <int,int>::iterator m1_Iter;

      m1.insert( pair <int, int>  ( 1, 10 ) );
      m1.insert ( pair<int, int>  ( 2, 20 ) );
      m1.insert ( pair<int, int>  ( 3, 30 ) );
      m2.insert ( pair<int, int>  ( 10, 100 ) );
      m2.insert ( pair<int, int>  ( 20, 200 ) );
      m3.insert ( pair<int, int>  ( 30, 300 ) );

   cout << "Theoriginal map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( );m1_Iter++ )
      cout <<" " << m1_Iter->second;
      cout   <<"." << endl;

   // This is the member functionversion of swap
   //m2 is said to be the argument map; m1 the targetmap
   
m1.swap( m2 );

   cout << "Afterswapping with m2, map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( );m1_Iter++ )
      cout <<" " << m1_Iter -> second;
      cout  <<"." << endl;
   cout << "After swapping with m2, map m2is:";
   for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( );m1_Iter++ )
      cout <<" " << m1_Iter -> second;
      cout  <<"." << endl;
   // This is the specialized template version of swap
   swap( m1, m3 );

   cout << "Afterswapping with m3, map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( );m1_Iter++ )
      cout <<" " << m1_Iter -> second;
      cout   <<"." << endl;
}

6.mapsort问题:
  Map
中的元素是自动按key升序排序,所以不能对mapsort函数:
  For example

  #include <map>
  #include <iostream>

  using namespace std;

 int main( )
 {
   map <int, int> m1;
   map <int, int>::iterator m1_Iter;

   m1.insert ( pair <int,int>  ( 1, 20 ) );
   m1.insert ( pair <int, int>  (4, 40 ) );
   m1.insert ( pair <int, int>  (3, 60 ) );
   m1.insert ( pair <int, int>  (2, 50 ) );
   m1.insert ( pair <int, int>  (6, 40 ) );
   m1.insert ( pair <int, int>  (7, 30 ) );

   cout << "Theoriginal map m1 is:"<<endl;
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( );m1_Iter++ )
      cout <<  m1_Iter->first<<""<<m1_Iter->second<<endl;
  
}
  The original map m1 is:
  1 20
  2 50
  3 60
  4 40
  6 40
  7 30
  
请按任意键继续. . .

                                                     

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值