如何改进存储多个结果的结构
How to improve a structure storing many results?
我有一个Polygon
结构和一个具有以下签名的函数
Polygon myfunction(Polygon &pol1, Polygon &pol2, int rot1, int rot2);
,其中pol1和pol2为Polygon
s, rot1和rot2为施加于pol1和pol2上的旋转。
我需要存储myfunction
应用于一组多边形和一组可接受的旋转的所有结果。
目前我将它们存储在这样的容器中:
vector<vector<vector<vector<Polygon>> results;
这样调用results[pol1][pol2][rot1][rot2];
我就得到了正确的多边形
我知道访问单个结果可能非常低效,那么我该如何改进呢?
这取决于很多事情,我的解决方案是混合std::tuple
和std::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));
相关文章:
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- 菱形层次结构中的虚函数重载在 clang 和 gcc 中产生不同的结果
- 如何使用 spirit x3 将解析的结果移动到结构中
- 根据标准对结构向量进行排序,然后显示结果
- 在包含预计算结果或可计算结果的结构中使用联合
- 节省增强精神递归匹配结果为C 结构
- 根据定界符将字符串向量分开,并将结果存储在结构中
- 通过更改代码格式来计算结构向量中包含的双精度变量的平均值的不同结果?
- 对 std::atomic::load 的结果使用结构取消引用 (->) 运算符是否安全
- 大小(结构体)..给出错误的结果,VS 2010
- 一个C++结构,它可以提高可读性,计算结果为零,但不是宏
- boost::spirit: qi::rule 或包含 qi::rule 作为解析结果的结构
- 将结构传递给函数时出现意外结果
- 对结构进行操作并将结果分配给同一结构是否是一种不好的做法?为什么
- Qt数据报结构结果:混合序列
- 执行set_difference时出错:变量结果不是结构
- 如何改进存储多个结果的结构
- c++,从数据库结果创建结构体
- 在宿主结构体上设置指针时出现意外结果
- 尺寸给我的结构带来意想不到的结果