【发布时间】:2011-03-11 02:39:40
【问题描述】:
我有一张地图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。即给定向量<2,4> 和<6,2>,它们之间的最大值是<6,4> 所以id 的(1 和2)和(2 和3)等等可以给我。
我试图做的是遍历 m1 中向量的每一列,并在找到 6 时存储相应的 set 值,在此示例中为 < <2> <6,2> > 和 < <4>,<6,1> > 并为第二列。现在我不知道如何整合它来得到我的结果。
【问题讨论】:
-
我只使用集合作为 ID,因为 id 1 中有值 4,id 2 中有 6。我想证明 id 的 1,2 可以在
v1中产生最大值。 -
这本书我只看了四遍,很慢。然后我查看了现在存在的两个答案。我还是不明白这个问题。在
< <1>, <2,4> >中,<1>部分是带有一个元素的 std::set,<2,4>部分是带有两个元素的 std::vector?maximum values in each column of the vector是什么意思——向量是一维的,为什么是行/列的措辞? -
给定一个具有 的向量 v1,我想在 map
中找到第一个元素为 6,第二个元素为 4 的所有值在地图中。把它想象成一个8皇后问题。首先,我在地图中找到具有 6 的值,然后搜索具有 4 的值的第二个元素并作为输出。一旦我没有更多的 4,我会回溯并找到下一个 6 并做同样的事情,依此类推.. -
@Frerich:你能明白我的想法吗?
-
@Sunil:我以为我明白你的意思,但后来我看到 xjdrew 实现了与你描述的完全相同的算法——但你不接受这一点。所以我一定错过了什么。对于给定映射中的每个向量,检查向量是否以
v1开头(即第一个元素是6,第二个元素是4)。如果是这样,请通过在某处存储迭代器来记住该地图元素。