我有以下2D地图,它允许我首先遍历外部地图,然后迭代内部地图,如下所示:
SELECT id, sumcnt, cnt2
FROM(
SELECT id, count(*) as cnt2, sum(cnt) as sumcnt
FROM (
SELECT id, kmstand, vacationame, count(*) as cnt
FROM `db_1`.`table_new`
WHERE (vacationame='vacation1'
OR vacationame='vacation2'
OR vacationame='vacation3'
OR vacationame='vacation4')
GROUP BY id, kmstand, vacationame)T
GROUP BY id)T
WHERE (sumcnt/cnt2 = 1)
现在我想首先遍历内部地图然后再遍历外部地图。但是,我无法弄清楚如何去做。以下是我想要实现的目标的描述:
map<string, map<string, double>> grid;
for (map<string, map<string, double>>::iterator person = grid.begin(); person != grid.end(); ++person)
{
personTotal = 0;
for (map<string, double>::iterator product = person->second.begin(); product != person->second.end(); ++product)
{
personTotal += product->second;
}
personFunction(person->first, personTotal);
}
是否可以先将内部地图迭代到外部地图?如果没有,我想我需要改变我的数据结构。什么数据结构允许我在任一维度中自由迭代(以字符串作为键)?
答案 0 :(得分:1)
地图地图不会成功,因为你可以迭代一个维度(让他们称之为行)但不能覆盖其他维度(让他们称之为列)。
解决方案是使用类似于数组的结构(因此您可以在行或列上进行迭代),其中只使用您拥有数据的[row,column]点。这通常称为sparse matrix。
您可以使用Boost ublas mapped-matrix。
有关更多替代方案,请参阅此问题:Is there a Boost (or other common lib) type for matrices with string keys?