首先简单介绍一下vector和map的概念吧。
vector是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
map是STL的一个关联容器,提供一对一数据处理能力。如map<T,T>,第一个数据时关键字,第二个是关键字的值,内部有一颗红黑树,实现以关键字为评判标准的自动排序,默认为升序,在编程中提供快速通道。
vector基本用法:
一、基本操作
- #include "vector"//1)头文件:
- vector<int>vec;//2)创建一个int型的容器:
- vec.push_back(5);//3)尾部插入元素:
- cout<<vec[0]<<endl;下表从0开始;//4)使用下标访问元素:
- vector<int>::iterator it;//5)使用迭代器访问元素:
- for (it=vec.begin();it!=vec.end();it++)
- {
- cout<<*it<<endl;
- }
- vec.insert(vec.begin()+i,5);//在第i+1个元素前插入5
- vec.erase(vec.begin()+2)//删除第3个元素
- vec.erase(vec.begin()+i,vec.end()+j)//删除[i,j-1]之间的元素
- vec.size();//向量的大小,即容器元素个数
- vec.clear();//容器清空
- vector<int>::iterator it;
- it=find(vec.begin(),vec.end(),5);//在vec容器中查找元素5,找到返回其位置迭代器it,找不到it=vec.end()
二、元素类型
一般元素类型有int,double,string,结构体(结构体的话要声明为全局变量)
三、算法
- reverse(vec.begin(),vec.end());//将vector元素倒序,reverse要包含头文件#include"algorithm"
- sort(vec.begin(),vector.end());//也要包含头文件#include"algorithm",并且是默认升序排序
- //也可以自定义排序实现如下
- bool cmp(const int &a,const int &b)
- {
- return a>b;
- }
- sort(vec.begin(),vec.end(),cmp)//这样实现的降序排序,也可以用默认升序再reverse实现降序排序
- //cmp中可以实现自己的想要实现算法
一、构造
- map<int,string>ID;//构造方法很多,这里只举例一种
- ID.insert(pair<int,string>(1,"id_one"));//几种插入方式都一样,看个人喜好选择
- ID.insert(map<int,string>::value_type(1,"id_one"));
- make_pair(1,'id_one');
- ID[1]="id_one";
- map<int,string>::iterator it; //前向迭代器访问
- for (it=ID.begin();it!=ID.end();it++)
- {
- cout<<it->first<<" "<<it->second<<endl;
- }
- map<int,string>::reverse_iterator it; //反向迭代器访问
- for (it=ID.begin();it!=ID.end();it++)
- {
- cout<<it->first<<" "<<it->second<<endl;
- }
- int len=ID.size();
- for (int Index=0;Index<len;Index++)
- {
- cout<<ID[Index]<<endl;
- }
用find()命令,若数据找到则返回数据位置的迭代器,若map中无要查找的元素,返回迭代器等于end函数返回的迭代器,如下所示:
- map<int,string>::iterator it;
- it=ID.find(1);
- if (it!=ID.end())
- cout<<"Find the ID is:"<<it->first<<it->second<<endl;
- else
- cout<<"Not find"<<endl;
- ID.clear();//表示清空map的数据
- ID.empty();//判断map是否为空
- ID.erase(it);//删除迭代器it位置的元素
题目描述:输入一个字符串,统计其出现频率最高的字符,并输出。若存在两个字符出现频率相同,则输出字典序较 小的那一个。
输入描述:一个字符串,保证没有空格,以回车符结束
输出描述:一个字符
如输入:bbbcccdddaaaifjk,则输出是:a
- #include "iostream"
- #include "string"
- #include "map"
- #include "vector"
- using namespace std;
- //******map对char型数据也可以实现排序********
- int main()
- {
- map<char,int>result;
- map<char,int>::iterator it;
- map<char,int>::reverse_iterator rit;
- vector<char>cntt;
- vector<char>::iterator itt;
- string s;
- cout<<"shu ru zi fu:";
- cin>>s;
- int len=s.size();
- int t=1;
- int max_cnt=INT_MIN;
- for (int i=0;i<len;i++)
- {
- it=result.find(s[i]);
- if (it==result.end())
- {
- result[s[i]]=1;
- }
- else
- {
- int t=it->second;
- result.erase(it);
- result[s[i]]=t+1;
- }
- }
- for (it=result.begin();it!=result.end();it++)
- {
- if (it->second>max_cnt)
- {
- max_cnt=it->second;
- cntt.clear();
- cntt.push_back(it->first);
- }
- else if (it->second==max_cnt)
- {
- cntt.push_back(it->first);
- }
- }
- for (itt=cntt.begin();itt!=cntt.end();itt++)
- {
- cout<<*itt<<" "<<endl;
- }
- itt=cntt.begin();
- cout<<"最小的字符为:";
- cout<<cntt[0]<<endl;
- return 0;
- }