3

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

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

其中 pol1 和 pol2 是Polygons,rot1 和 rot2 是应用于 pol1 和 pol2 的旋转。

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

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

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

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

这样results[pol1][pol2][rot1][rot2];我就得到了正确的多边形。

我知道访问单个结果可能效率很低,那么我该如何改进呢?

4

1 回答 1

2

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

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

std::map<Params, Polygon> results;

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

要使用,您必须重载operator<forPolygon因为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));
于 2013-04-17T16:12:38.450 回答