浅议vector和map用法

 首先简单介绍一下vector和map的概念吧。

   vector是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

    map是STL的一个关联容器,提供一对一数据处理能力。如map<T,T>,第一个数据时关键字,第二个是关键字的值,内部有一颗红黑树,实现以关键字为评判标准的自动排序,默认为升序,在编程中提供快速通道。

    vector基本用法:

一、基本操作

[cpp]  view plain copy
  1. #include "vector"//1)头文件:  
  2. vector<int>vec;//2)创建一个int型的容器:  
  3. vec.push_back(5);//3)尾部插入元素:  
  4. cout<<vec[0]<<endl;下表从0开始;//4)使用下标访问元素:  
  5. vector<int>::iterator it;//5)使用迭代器访问元素:  
  6. for (it=vec.begin();it!=vec.end();it++)  
  7. {  
  8.     cout<<*it<<endl;  
  9. }  
  10. vec.insert(vec.begin()+i,5);//在第i+1个元素前插入5  
  11. vec.erase(vec.begin()+2)//删除第3个元素  
  12. vec.erase(vec.begin()+i,vec.end()+j)//删除[i,j-1]之间的元素  
  13. vec.size();//向量的大小,即容器元素个数  
  14. vec.clear();//容器清空  
  15. vector<int>::iterator it;  
  16. it=find(vec.begin(),vec.end(),5);//在vec容器中查找元素5,找到返回其位置迭代器it,找不到it=vec.end()  

二、元素类型

    一般元素类型有int,double,string,结构体(结构体的话要声明为全局变量)

三、算法

[cpp]  view plain copy
  1. reverse(vec.begin(),vec.end());//将vector元素倒序,reverse要包含头文件#include"algorithm"  
  2. sort(vec.begin(),vector.end());//也要包含头文件#include"algorithm",并且是默认升序排序  
  3. //也可以自定义排序实现如下  
  4. bool cmp(const int &a,const int &b)  
  5. {  
  6.     return a>b;  
  7. }  
  8. sort(vec.begin(),vec.end(),cmp)//这样实现的降序排序,也可以用默认升序再reverse实现降序排序  
  9.                                //cmp中可以实现自己的想要实现算法  
    map基本用法:

一、构造

[cpp]  view plain copy
  1. map<int,string>ID;//构造方法很多,这里只举例一种  
二、数据插入

[cpp]  view plain copy
  1. ID.insert(pair<int,string>(1,"id_one"));//几种插入方式都一样,看个人喜好选择  
  2. ID.insert(map<int,string>::value_type(1,"id_one"));  
  3. make_pair(1,'id_one');  
  4. ID[1]="id_one";  
三、数据遍历

[cpp]  view plain copy
  1. map<int,string>::iterator it;   //前向迭代器访问  
  2. for (it=ID.begin();it!=ID.end();it++)  
  3. {  
  4.     cout<<it->first<<" "<<it->second<<endl;  
  5. }  
  6. map<int,string>::reverse_iterator it;   //反向迭代器访问  
  7. for (it=ID.begin();it!=ID.end();it++)  
  8. {  
  9.     cout<<it->first<<" "<<it->second<<endl;  
  10. }  
  11. int len=ID.size();  
  12. for (int Index=0;Index<len;Index++)  
  13. {  
  14.     cout<<ID[Index]<<endl;  
  15. }  
四、数据查找

用find()命令,若数据找到则返回数据位置的迭代器,若map中无要查找的元素,返回迭代器等于end函数返回的迭代器,如下所示:

[cpp]  view plain copy
  1. map<int,string>::iterator it;  
  2. it=ID.find(1);  
  3. if (it!=ID.end())  
  4.     cout<<"Find the ID is:"<<it->first<<it->second<<endl;  
  5. else  
  6.     cout<<"Not find"<<endl;  
五、其他

[cpp]  view plain copy
  1. ID.clear();//表示清空map的数据  
  2. ID.empty();//判断map是否为空  
  3. ID.erase(it);//删除迭代器it位置的元素  
    以上便是vector和map的基本用法,当然还有更多的深层次的用法,以后会慢慢补上。介绍了基本用法,就用一个程序说明它们的运用,请诸君体会它们的好处与优点吧。

题目描述:输入一个字符串,统计其出现频率最高的字符,并输出。若存在两个字符出现频率相同,则输出字典序较           小的那一个。

输入描述:一个字符串,保证没有空格,以回车符结束

输出描述:一个字符

如输入:bbbcccdddaaaifjk,则输出是:a

[cpp]  view plain copy
  1. #include "iostream"  
  2. #include "string"  
  3. #include "map"  
  4. #include "vector"  
  5. using namespace std;  
  6.   
  7.   
  8. //******map对char型数据也可以实现排序********  
  9. int main()  
  10. {  
  11.     map<char,int>result;  
  12.     map<char,int>::iterator it;  
  13.     map<char,int>::reverse_iterator rit;  
  14.     vector<char>cntt;  
  15.     vector<char>::iterator itt;  
  16.   
  17.     string s;  
  18.     cout<<"shu ru zi fu:";  
  19.     cin>>s;  
  20.     int len=s.size();  
  21.     int t=1;  
  22.     int max_cnt=INT_MIN;  
  23.   
  24.     for (int i=0;i<len;i++)  
  25.     {  
  26.         it=result.find(s[i]);  
  27.         if (it==result.end())  
  28.         {  
  29.             result[s[i]]=1;  
  30.         }  
  31.         else  
  32.         {  
  33.             int t=it->second;  
  34.             result.erase(it);  
  35.             result[s[i]]=t+1;  
  36.         }  
  37.     }  
  38.     for (it=result.begin();it!=result.end();it++)  
  39.     {  
  40.         if (it->second>max_cnt)  
  41.         {  
  42.             max_cnt=it->second;  
  43.             cntt.clear();  
  44.             cntt.push_back(it->first);  
  45.         }  
  46.         else if (it->second==max_cnt)  
  47.         {  
  48.             cntt.push_back(it->first);  
  49.         }  
  50.     }  
  51.     for (itt=cntt.begin();itt!=cntt.end();itt++)  
  52.     {  
  53.         cout<<*itt<<" "<<endl;  
  54.     }  
  55.     itt=cntt.begin();  
  56.     cout<<"最小的字符为:";  
  57.     cout<<cntt[0]<<endl;  
  58.     return 0;  
  59. }  
    望诸君不吝赐教,共同进步,共同学习,觉得好别忘了评论哦!谢谢!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值