我有一张地图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
编辑:
要解释更多,请让地图中的集合充当相应矢量的max
。现在,该地图中“组合”的所有矢量都可以产生&lt; 6,4&gt;。 ?请注意,此处的聚合函数是<2,4>
。即赋予向量<6,2>
和<6,4>
,它们之间的最大值为set
,因此id(1和2)和(2和3)等等可以给我&lt; 6,4&gt; ;
我尝试做的是遍历m1中向量的每一列,并在找到6
时存储相应的< <2> <6,2> >
值,在此示例中为< <4>,<6,1> >
和{{ 1}}并对第二列做同样的事情。现在我不知道如何整合它来获得我的结果。
答案 0 :(得分:0)
#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);
}
}
我不知道这是否有编译错误,但你可以明白这一点。
答案 1 :(得分:0)
#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 :: equal来比较两个向量。