【发布时间】:2017-09-18 14:07:21
【问题描述】:
我需要实现一种算法,从预定义的可能性中选择最佳三元组(三个整数的集合)。详情:
-
有一个枚举类定义如下:
enum class myEnum { a6 = 0, a10, a14, a18, a119, a123, a127, a131, a135 }
这些成员可以组合成三元组
{a6,a10,a14}, {a6, a14, a18}。只有 11 个可能的三元组(因为条件在这里并不重要)。
我必须选择三元组,对三元组的每个成员进行一些计算,并考虑其他条件选择最好的三元组。
哪种数据结构和设计最适合这 11 个三元组?一个三元组“正在使用”,因此应从计算中排除,或者可以对每个三元组进行计算,然后将其从结果中排除(没关系):
struct a6
{
int value;
};
typeToChoose possibleTriples = {
{
a6, a10, a14
a6, a10, a18
a6, a14, a18
a10, a14, a18
a119, a123, a127
a119, a123, a131
a119, a127, a131
a123, a127, a131
a123, a127, a135
a123, a131, a135
a127, a131, a135
}
假设{a6, a10, a14} 正在使用中。现在我必须遍历
possibleTriples 计算字段 value 的总和:
int sumOfValues = a6.value + a10.value + a18.value;
并选择总和最小的最小三倍。 {a6, a10, a14} == {a14, a10, a6}
【问题讨论】:
-
我建议您提供一个minimal reproducible example 的代码来满足您的需求(但效率低下)并寻求优化建议。让它发挥作用,然后让它变得更好。
-
考虑到要求的模糊性,并假设 { a, b, c } !== { a, c, d },我只需创建一个 729 元素数组/向量并对其进行迭代用你的测试
-
你想过
std::tuple<myEnum, myEnum, myEnum>吗? -
是的,我有,但仍然想知道这个预定义结构的类型应该是什么才能有效地遍历它。只是元组数组?