c++ stl(4)map容器

map的定义

	map<typename1,typename2> mp;
	
	 map<int,int> mp;
	 map<string,int> mp;
	 map<set<int>,string> mp;

map需要确定映射前类型(键key)和映射后类型(值 value) <>内填写两个类型,其中第一个键的类型,第二个是值的类型,
如果是字符串到整形的映射,必须使用string而不用char数组类型

map容器的内元素的访问
通过下标访问
和访问普通数组一样,例如对一个定义为map<char,int> mp的map来说,就可以直接使用mp[‘c’]的方式来访问它对应的整数,map中的键值是唯一的

	map<char,int> mp;
	mp['c']=1;
	mp['c']=2;//1被覆盖 
	cout<<mp['c']<<endl;//2;

通过迭代器返回

 map<typename1,typename2>::iterator it;

map可以使用it->first来访问键,使用it->second来访问值

map内部是由红黑树实现的
map会以键从小到大的顺序自动排序

insert() 添加一个新的pair到map中

  map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  
  
  mp.insert(pair<char,int>('d',4));
  map<char,int>::iterator it;
    mp.size();
  	  for(it=mp.begin();it!=mp.end();it++){
    
    
   	 cout<<it->first<<" "<<it->second<<endl; 
   }
   //a 1
  //b 2
  //c 3
  //d 4

find()
find(key) 返回键值为key的映射迭代器

map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  
   map<char,int>::iterator it;
   it=mp.find('a');
   cout<<it->first<<" "<<it->second<<endl; //a 1

查找一个元素是否出现在map中

 map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  
  map<char,int>::iterator it;
  it=mp.find('a');
  if(it!=mp.end()){
    
      //存在 
  	cout<<"存在"<<endl; 
  }
  else{
    
    
  	cout<<"不存在"<<endl; 
  }
   it=mp.find('d');
  if(it!=mp.end()){
    
     //不存在 
  	cout<<"存在"<<endl; 
  }
  else{
    
    
  	cout<<"不存在"<<endl; 
  }

count(key) 返回某个键值的数量

  map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  mp['c']=4;//会覆盖前面的mp['c']的值 
  cout<<mp.count('c')<<endl; //1

empty()

  map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
 
   cout<<mp.empty()<<endl;//0

erase()
erase()有两种用法 删除单个元素,删除一个区间内的所有元素
mp.erase(it) it为所需要删除元素的迭代器

map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  
   map<char,int>::iterator it;
   it=mp.find('a');

   mp.erase(it);
   for(it=mp.begin();it!=mp.end();it++){
    
    
   	 cout<<it->first<<" "<<it->second<<endl;  //b 2   c 3
   	  
   }

mp.erase(key) key为欲删除的映射的键

map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;

 map<char,int>::iterator it;
   	  mp.erase('b');
   	  for(it=mp.begin();it!=mp.end();it++){
    
    
   	 cout<<it->first<<" "<<it->second<<endl; 
   }

mp.erase 删除一个区间内的所有元素
mp.erase(first,last) 其中first为需要删除的区间的起始迭代器,而last则为所需要删除的区间的末尾迭代器的下一个地址,也即为删除左闭右开的区间

map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  mp['d']=4;
  mp['e']=5;
  
  map<char,int>::iterator it;
  it=mp.find('b');
  mp.erase(it,mp.end());
  	  for(it=mp.begin();it!=mp.end();it++){
    
    
   	 cout<<it->first<<" "<<it->second<<endl; //a 1
   }

clear()清空map集合中的所有元素
size()获得map中映射的对数

map<char,int> mp;
  mp['a']=1;
  mp['b']=2;
  mp['c']=3;
  mp['d']=4;
  mp['e']=5;
  
  map<char,int>::iterator it;
    mp.size();
  	  for(it=mp.begin();it!=mp.end();it++){
    
    
   	 cout<<it->first<<" "<<it->second<<endl; 
   }
   mp.clear();
   cout<<mp.size()<<endl;//0

猜你喜欢

转载自blog.csdn.net/qq_44866153/article/details/109105305
今日推荐