C++清点单词数

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:52:05
出于统计目的,要数一下一篇文章的段落数(大约1000个段落,每个段落以回车为标志),并且按每个段落的单词数进行排序输出.
代码:
#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
#include<map>
using namespace std;
typedef multimap<int,int> Mmap;//?这行啥意思?
int main(){
ifstream in("abc.txt");
vector<string>abc;
Mmap nums;
int n=0;
for(string s;getline(in,s);){
istringstream sin(s);
int num=0;
for(string t;sin>>t;num++);
if(num){
nums.insert(Mmap::value_type(num,n++));//?这行啥意思?
abc.push_back(s);
}
}
for(Mmap::iterator it=nums.begin();it!=nums.end();it++)//?这行啥意思?
cout<<abc[it->second]<<endl;//?这行啥意思?
}

哪位大大帮在下解释一下~~~
在下的书上没解释```
PS:别叫在下去买本书看哈```
主要是在multimap<int,int>,::,it,->附近的语句看不懂```
稍微细讲一下~~~
各位```
在下C++刚入门2周不到```
就要开始研究STL么```
在下只是个纯粹的新手```

1.typedef multimap<int,int> Mmap;//?这行啥意思?

这个是"类型定义",也就是把multimap<int,int>这一句用Mmap代替.

2.nums.insert(Mmap::value_type(num,n++));//?这行啥意思?
是往map里插入一个键值对

3. for(Mmap::iterator it=nums.begin();it!=nums.end();it++)//?这行啥意思?
这个事循环遍历map集合.

4. cout<<abc[it->second]<<endl;//?这行啥意思?
输出abc中的元素.

建议楼主研究下STL. 这些东西不是几句话可以讲清楚地.

Mmap 的第一个 int 是段落的单词数,第二个是段落在abc数组中的下标,
map 是以红黑树实现的
然后 stl 中 往 map 中insert 会自动按照第一个数据(这里是单词数num)从小到大排序。
然而,要取出 map 中的元素就必须得 用map迭代器遍历,
这就是for(Mmap::iterator it=nums.begin();it!=nums.end();it++) 的做法了
对于 abc[it->second] 就是通过下标访问abc数组中的字符串

typedef multimap<int,int> Mmap
定义一个模板类为Mmap。
看一下STL

呵呵,我也没有看懂