是否有一种简单或标准的方法来使用多图迭代器迭代多图中的唯一键?
即对于一个看起来像的集合:{1, "a"}, {1, "lemon"}, {2, "peacock"}, {3, "angel"}
一个迭代器,它会在{1, "a"}然后开始递增,指向{2, "peacock"}然后再次递增会指向{3, "angel"}?
Multimap实际上具有按键排序的数据组.我想要一种方法,通过该方法我可以访问这些单独的组并获取它们的聚合值.例如,在std::multimap< string, int >I商店中
{"Group1", 1},
{"Group1", 2},
{"Group1", 3},
{"Group2", 10},
{"Group2", 11},
{"Group2", 12}
Run Code Online (Sandbox Code Playgroud)
存储了这些值之后,我应该能够迭代这个多图并获得每个"组"的聚合值.问题是STL中没有定义任何以这种方式访问MultiMaps的函数.我可以使用lower_bound,upper_bound手动迭代多图并总计组的内容,但我希望有更好的方法在STL中定义?任何人都可以提出一个解决方案,如何在上面的例子中获取组的聚合值.
有没有什么好方法可以实现以下所需的输出,而无需删除相同的值或创建另一个列表/向量等?我试图将在不同文档中找到的单词映射到他们的文档名称,如所需的输出中所示.
#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;
Run Code Online (Sandbox Code Playgroud)
}
Output is:
> ./a.out A B
cat A
dog A B
dog A B
fox …Run Code Online (Sandbox Code Playgroud)