地图<set,vectors>的逻辑问题?</set,vectors>

时间:2011-03-11 02:39:40

标签: c++ vector map set

我有一张地图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}}并对第二列做同样的事情。现在我不知道如何整合它来获得我的结果。

2 个答案:

答案 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来比较两个向量。