2D地图式数据结构,允许迭代不同的维度

时间:2015-10-23 17:55:09

标签: c++ dictionary multidimensional-array key

我有以下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);
}

是否可以先将内部地图迭代到外部地图?如果没有,我想我需要改变我的数据结构。什么数据结构允许我在任一维度中自由迭代(以字符串作为键)?

1 个答案:

答案 0 :(得分:1)

地图地图不会成功,因为你可以迭代一个维度(让他们称之为行)但不能覆盖其他维度(让他们称之为列)。

解决方案是使用类似于数组的结构(因此您可以在行或列上进行迭代),其中只使用您拥有数据的[row,column]点。这通常称为sparse matrix

您可以使用Boost ublas mapped-matrix

有关更多替代方案,请参阅此问题:Is there a Boost (or other common lib) type for matrices with string keys?