C++map容器用法

来源:互联网 发布:网络视听通则 编辑:程序博客网 时间:2024/05/07 13:34

1. map最基本的构造函数;

[cpp] view plain copy
  1. map<string ,int>mapstring; map<int,string >mapint;  
  2. map<sring,char>mapstring; map< char ,string>mapchar;  
  3. map<char,int>mapchar; map<int ,char>mapint;  


2. map添加数据;

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


3. map中元素的查找:

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

[cpp] view plain copy
  1. map<int ,string >::iteratorl_it;;   
  2. l_it=maplive.find(112);//返回的是一个指针  
  3. if(l_it==maplive.end())  
  4. cout<<"we do not find112"<<endl;  
  5. else cout<<"wo find112"<<endl;  
  6.   
  7. map<string,string>m;  
  8. if(m[112]=="")  
  9. cout<<"we do not find112"<<endl;  

4. map中元素的删除:
如果删除112;

[cpp] view plain copy
  1. map<int ,string>::iterator l_it;;  
  2. l_it =maplive.find(112);  
  3. if( l_it == maplive.end())  
  4. cout<<"we do not find112"<<endl;  
  5. else maplive.erase(l_it);//delete 112;  


5. map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:

[cpp] view plain copy
  1. #include<map>  
  2. #include<iostream>  
  3. usingnamespace std;  
  4. int main()  
  5. {  
  6.     map <intint> m1, m2, m3;  
  7.     map <int,int>::iterator m1_Iter;  
  8.     m1.insert( pair <intint>(1, 10 ) );  
  9.     m1.insert ( pair <int,int> ( 2, 20 ) );  
  10.     m1.insert ( pair <int,int> ( 3, 30 ) );  
  11.     m2.insert ( pair <int,int> ( 10, 100 ) );  
  12.     m2.insert ( pair <int,int> ( 20, 200 ) );  
  13.     m3.insert ( pair <int,int> ( 30, 300 ) );  
  14.     cout << "The original map m1is:";  
  15.     for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )  
  16.         cout << " "<<m1_Iter->second;  
  17.     cout << "."<< endl;  
  18.     // This isthe member function version of swap  
  19.     // m2 is said to be theargument map; m1 the target map  
  20.     m1.swap( m2);  
  21.     cout << "Afterswapping with m2, map m1 is:";  
  22.     for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )  
  23.         cout << " "<< m1_Iter ->second;  
  24.     cout << "."<< endl;  
  25.       
  26.     cout << "After swapping with m2, mapm2 is:";  
  27.     for ( m1_Iter = m2.begin( ); m1_Iter != m2.end(); m1_Iter++ )  
  28.         cout << " "<< m1_Iter ->second;  
  29.     cout << "."<< endl;  
  30.       
  31.     // This is the specialized template version of swap  
  32.     swap( m1, m3 );  
  33.     cout << "Afterswapping with m3, map m1 is:";  
  34.     for ( m1_Iter = m1.begin( ); m1_Iter != m1.end(); m1_Iter++ )  
  35.         cout << " "<< m1_Iter ->second;  
  36.     cout << "."<< endl;  
  37. }  


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

[cpp] view plain copy
  1. #include<map>  
  2. #include<iostream>  
  3. usingnamespace std;  
  4. int main( )  
  5. {  
  6.     map<intint> m1;  
  7.     map <int,int>::iterator m1_Iter;  
  8.     m1.insert (pair <intint> (1, 20 ) );  
  9.     m1.insert ( pair<intint> ( 4, 40) );  
  10.     m1.insert ( pair<intint> ( 3, 60) );  
  11.     m1.insert ( pair<intint> ( 2, 50) );  
  12.     m1.insert ( pair<intint> ( 6, 40) );  
  13.     m1.insert ( pair<intint> ( 7, 30) );  
  14.     cout<< "The original map m1is:"<<endl;  
  15.     for ( m1_Iter = m1.begin( );m1_Iter != m1.end( ); m1_Iter++ )  
  16.         cout << m1_Iter->first<<""<<m1_Iter->second<<endl;  
  17.       
  18. }  

The original map m1 is:
1 20
2 50
3 60
4 40
6 40
7 30

7. map的基本操作函数:
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的函数

8.multimap
[cpp] view plain copy
  1. //multimap允许重复的键值插入容器    
  2. //        **********************************************************          
  3. //        * pair只包含一对数值:pair<int,char>                       *    
  4. //        * map是一个集合类型,永远保持排好序的,                   *    
  5. //  pair  * map每一个成员就是一个pair,例如:map<int,char>           *    
  6. //        * map的insert()可以把一个pair对象作为map的参数,例如map<p> *    
  7. //        ***********************************************************    
  8. #pragma warning(disable:4786)    
  9. #include<map>    
  10. #include<iostream>    
  11. using namespace std;    
  12.   
  13. int main(void)    
  14. {    
  15.     multimap<int,char*> m;    
  16.     //multimap的插入只能用insert()不能用数组    
  17.     m.insert(pair<int,char*>(1,"apple"));    
  18.     m.insert(pair<int,char*>(1,"pear"));//apple和pear的价钱完全有可能是一样的    
  19.     m.insert(pair<int,char*>(2,"banana"));    
  20.     //multimap的遍历只能用迭代器方式不能用数组    
  21.     cout<<"***************************************"<<endl;    
  22.     multimap<int,char*>::iterator i,iend;    
  23.     iend=m.end();    
  24.     for(i=m.begin();i!=iend;i++)    
  25.     {    
  26.         cout<<(*i).second<<"的价钱是"    
  27.             <<(*i).first<<"元/斤\n";    
  28.     }    
  29.     cout<<"***************************************"<<endl;    
  30.     //元素的反相遍历    
  31.     multimap<int,char*>::reverse_iterator j,jend;    
  32.     jend=m.rend();    
  33.     for(j=m.rbegin();j!=jend;j++)    
  34.     {    
  35.         cout<<(*j).second<<"的价钱是"    
  36.             <<(*j).first<<"元/斤\n";    
  37.     }    
  38.     cout<<"***************************************"<<endl;    
  39.     //元素的搜索find(),pair<iterator,iterator>equal_range(const key_type &k)const    
  40.     //和multiset的用法一样    
  41.     multimap<int,char*>::iterator s;    
  42.     s=m.find(1);//find()只要找到一个就行了,然后立即返回。    
  43.     cout<<(*s).second<<"    "    
  44.         <<(*s).first<<endl;    
  45.     cout<<"键值等于1的元素个数是:"<<m.count(1)<<endl;    
  46.     cout<<"***************************************"<<endl;    
  47.     //删除 erase(),clear()    
  48.     m.erase(1);    
  49.     for(i=m.begin();i!=iend;i++)    
  50.     {    
  51.         cout<<(*i).second<<"的价钱是"    
  52.             <<(*i).first<<"元/斤\n";    
  53.     }    
  54.     return 0;    
  55. }    

转载自http://blog.csdn.net/flqbestboy/article/details/8184484

0 0
原创粉丝点击