我有一个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];
我得到正确的多边形。
我知道访问单个结果的效率可能非常低,所以我该如何改进呢?
答案 0 :(得分:2)
这取决于很多事情,我的解决方案是混合std::tuple
和std::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));