问题描述:

   属于一个偏向数据结构的问题,即统计重复的键的个数。

算法如下:

#include <iostream>
#include <algorithm>
#include <map>
#include <vector>

using namespace std;


int main(){
string str;
while(getline(cin,str)){
map<string,int> ss;
int pos=0;
while (str!=""){
pos=str.find_first_of(' ');
string s;
if(pos!=-1){
s = str.substr(0,pos);
} else{
s=str;
}
map<string,int>::iterator it;
if((it=ss.find(s))!=ss.end()){
int num = it->second;
num++;
ss[s]=num;
} else{
ss.insert({s,1});
}
if(pos==-1){
str.erase(0,str.size());
} else
str.erase(0,pos+1);
}

vector<int> indexes;
map<string,int>::iterator itr;
for(itr=ss.begin();itr!=ss.end();itr++){
indexes.push_back(itr->second);
}
sort(indexes.begin(),indexes.end());
for(int i=0;i<indexes.size();i++){
cout<<indexes[i]<<" ";
}
cout<<endl;
}

}

注释:

   1.要特别熟悉c++的字符串操作的相关api,list,set,map的相关api;

   2.set与map可以进行查找,vector不行;查找出来的是一个迭代器对象(因为它们是链表存储)

   3.vector与set可以进行数字索引定位,map可以进行键值索引定位;修改map的键值要用键值索引的方式