我有一张地图map<set,vector> m1。它的价值如下:
< <1>,<2,4> >
< <2>,<6,2> >
< <3>,<3,4> >
< <4>,<6,1> >
< <5>,<1,1> >现在,我必须在向量的每一列中找到最大值,我通过迭代所有行轻松地做到这一点,并将其存储在向量中,比如v1作为<6,4>。
现在的问题是,我想找到构成这个值的所有对。把它想象成在地图中可以生成<6,4>的所有可能的组合。也就是说,我的结果也应该是一张如下所示的地图:
< <1,2>,<6,4> >
< <2,3>,<6,4> >
< <1,4>,<6,4> >
< <3,4>,<6,4> >编辑:
为了解释更多,让映射中的集合充当对应向量的id。那么,地图中的所有向量“组合”都能产生一个<6,4>吗?注意,这里的聚合函数是max。对于向量<2,4>和<6,2>,它们之间的最大值是<6,4>,所以id (1和2)和(2和3)等都可以给出<6,4>。
我想要做的是迭代m1中向量的每一列,并在找到6时存储相应的set值,在本例中,< <2> <6,2> >和< <4>,<6,1> >对第二列执行同样的操作。现在我不知道如何集成它来获得我的结果。
发布于 2011-03-11 02:47:50
#define SI map<set,vector>::iterator
mx = find_max();
vector<set> ret;
for(SI it=m1.begin();it!=m1.end();it++){
for(SI it2=it;it2=m1.end();it++){
if(it==it2)continue;//nasty
if(find_max2(it,it2)==mx)
ret.push_back(it->first,it2->first);
}
}我不知道这是否有编译错误,但您可以理解。
发布于 2011-03-11 02:57:37
#define SI map<set,vector>::iterator
vector<SI> ret;
for(SI it=m1.begin();it!=m1.end();it++){
if(equal(v1.begin(),v1.end(),it->second.begin()){
ret.push_back(it);
}
}使用std::等于比较两个向量。
https://stackoverflow.com/questions/5268394
复制相似问题