迭代时跳过相同的多重映射值
有没有什么好方法可以实现下面所需的输出,而不必删除相同的值或创建另一个列表/向量等?我正在尝试将不同文档中找到的单词映射到其文档名称,如所需输出中所示。
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <sstream>
using namespace std;
multimap<string,string> inverts;
multimap<string,string>::iterator mit;
multimap<string,string>::iterator rit;
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret;
int main(int argc, char* argv[])
{
ifstream infile;
for(int i=1;i<argc;i++)
{
char* fname=argv[i];
char line[1024];
string buff;
infile.open(fname);
while(infile.getline(line,1024))
{
stringstream ss(line);
while(ss >> buff)
inverts.insert(pair<string,string>(buff,fname));
}
infile.close();
}
for(mit=inverts.begin();mit!=inverts.end();mit++)
{
string first=(*mit).first;
cout<<first;
ret=inverts.equal_range(first);
for(rit=ret.first;rit!=ret.second;rit++)
cout<<" "<<(*rit).second;
cout<<endl;
}
return 0;
}
Output is:
> ./a.out A B
cat A
dog A B
dog A B
fox A B
fox A B
lion B
I need this output:
> ./a.out A B
cat A
dog A B
fox A B
lion B
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以将
inverts
更改为map>
,将每个单词映射到它出现的文件名集。You could change
inverts
intomap<string,set<string>>
, mapping each word to the set of file names where it appears.典型的多映射迭代保留两个迭代器:
A typical multi-map iteration keeps two iterators: