关联容器(map):支持高效查找的容器,一种键值对的集合。
2024-10-09 09:03:46
#include <iostream>
#include <string>
#include <map>
#include <vector> using namespace std; //根据空格等将字符串,拆分成多个单词。
vector<string> split(const string& s)
{
vector<string> ret;
typedef string::size_type string_size;
string_size i=; while(i!=s.size())
{
while(i!=s.size() && isspace(s[i]))
{
++i;
}
string_size j=i;
while(j!=s.size() && !isspace(s[j]))
{
++j;
}
if(i!=j)
{
ret.push_back(s.substr(i,j-i));
i=j;
}
}
return ret;
} //得到一个单词为键,所在行的序列为值的一个关联容器集合
map<string,vector<int> > xref(istream & in,vector<string> find_words(const string&)=split)
{
string line;
int line_number=; map<string,vector<int> > ret; while(getline(in,line)) //读取分隔每一行的输入
{
++line_number;
vector<string> words=find_words(line);//找每一行单词的集合。 for(vector<string>::const_iterator it=words.begin();it!=words.end();++it)
{
ret[*it].push_back(line_number); //*it:一个单词
}
}
return ret;
} int main()
{
map<string ,vector<int> > ret=xref(cin);
for(map<string,vector<int> >::const_iterator it=ret.begin();it!=ret.end();++it)
{
cout<<it->first <<"在行:"; //输出一个单词
vector<int>::const_iterator line_it=it->second.begin();
cout<<*line_it; ++line_it;
while(line_it!=it->second.end())
{
cout<<","<<*line_it;
++line_it;
}
cout<<endl;
}
return ;
}
最新文章
- 【CentOS】安装RPM包或者源码包
- 海淘手表Invicta8926OB到手~晒图
- 浅谈Scrapy爬虫(一)
- Django model 中meta options之 abstract
- 《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 &;&; 检查一个字符串是文本还是二进制
- AIDL:Binder invocation to an incorrect interface
- 关于使用工具类org.apache.commons.collections.ListUtils合并List的问题
- 毕业设计 ASP.Net+EasyUI开发 X X露天矿调度管理信息系统(一)
- unity 打包 windows 运行 紫色 粉红色
- 2014 ACM省赛总结
- 密钥public/private key登陆linux
- 游戏服务器h2engine架构优化和跨平台设计
- HTML 练习on方法
- Django项目部署在Linux下以进程方式启动
- 洛谷 P1823 音乐会的等待
- [BJOI 2018]求和
- Java线程和多线程(十四)——Synchronized关键字解析
- 超简便安装mysql
- java项目环境搭建
- 【Swift】- UITextField完成输入后关闭软键盘的几种方法