Как улучшить структуру, хранящую много результатов?

у меня есть 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]; Я получил правильный многоугольник.

Я знаю, что доступ к одному результату может быть довольно неэффективным, так как я могу улучшить его?

3

Решение

Это зависит от многих вещей, мое решение смешивается 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));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]