如何改进存储多个结果的结构

How to improve a structure storing many results?

本文关键字:结果 结构 何改进 存储      更新时间:2023-10-16

我有一个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];我就得到了正确的多边形

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

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

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

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

要使用

,您必须为Polygon重载operator<,因为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));