如何改善存储许多结果的结构?

时间:2013-04-17 16:04:57

标签: c++ c++11 polygons

我有一个Polygon结构和一个带有以下签名的函数

Polygon myfunction(Polygon &pol1, Polygon &pol2, int rot1, int rot2); 

其中pol1和pol2是Polygon s,rot1和rot2是旋转应用于pol1和pol2。

我需要存储应用于一组多边形的myfunction的所有结果和一组允许的旋转。

因此,例如,如果我有100个多边形和4个允许的旋转,我需要存储100 * 100 * 4 * 4 = 160000个多边形。我知道我需要大量的内存,但我很好。

目前我将它们存放在这样的容器中:

vector<vector<vector<vector<Polygon>> results;

以便调用results[pol1][pol2][rot1][rot2];我得到正确的多边形。

我知道访问单个结果的效率可能非常低,所以我该如何改进呢?

1 个答案:

答案 0 :(得分:2)

这取决于很多事情,我的解决方案是混合std::tuplestd::map

typedef std::tuple<Polygon , Polygon , int, int> Params;

std::map<Params, Polygon> results;

将参数映射到结果。在这种情况下,您可以有效地找到特定输入的结果。

要使用,由于operator<,您必须为Polygon重载std::map

struct Polygon
{
// ...
};

inline bool operator<(const Polygon &p1, const Polygon &p2)
{
    return ...;
}

Polygon p1, p2, p3;

// ...

results.insert(std::make_pair(std::make_tuple(p1, p2, 1, 2), p3));