用于存储元组密钥的数据结构:参数列表关系

时间:2015-12-14 19:08:45

标签: c++ data-structures

在c ++中

我正在运行一个优化算法来为给定的温度和湿度组合找到一组参数,我想要一个有效查找和迭代时间的结构,以便进一步计算。

示例:我在温度范围[0k-300k] x湿度[x-xxx]范围内计算设备的所有5个参数。我想将它们存储在内存中,当我在给定的温度和湿度下调用函数时,它应该能够使用元组作为键快速加载相关的5个参数。

我正在考虑使用std::multimap<double, std::vector<double>>这样的多重图,但我不太喜欢矢量附带的行李。

编辑:

好的例子就是这样(对于一个变量):

for x in range(Temperature){
      parameterList[x] = (deviceClass.geneticAlgo(loss = 1, x));

deviceClass.setParameters(parameterList);

然后我想要那个课程:

double later_calc(temperature,humidity, x...){
       return deviceSimulation(parameterList[(temperature, humidity, x...)]);
}

我希望later_calc函数能够快速访问由温度,湿度等输入访问的类中的结构。

1 个答案:

答案 0 :(得分:1)

在我看来,您希望std::map使用std::tuple作为键或保存参数的自定义类,以及存储实验结果的映射类型(此处为{ {1}},但您也可以轻松使用自定义double类:

Result

DEMO

如果要重复实验,则应使用多图,即如果同一参数集有多个结果。 (但您也可以使用带有struct ParameterType { int temperature; int humidity; int x; bool operator<(ParameterType const& rhs) const { return std::tie(temperature, humidity, x) < std::tie(rhs.temperature, rhs.humidity, rhs.x); } }; using ResultType = double; int main() { std::map<ParameterType, ResultType> params; params[{263, 10, 1}] = 1.0; std::cout<< params[{263, 10, 1}] <<std::endl; } )的地图。

请注意,我使用整数值作为键,而在实践中,我们很想使用浮点数。然而,由于舍入误差,这些可能导致密钥比较中的问题。因此,最好修复十进制数字并将实际输入解码为std::vector<ResultType> 263.53