在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函数能够快速访问由温度,湿度等输入访问的类中的结构。
答案 0 :(得分:1)
在我看来,您希望std::map
使用std::tuple
作为键或保存参数的自定义类,以及存储实验结果的映射类型(此处为{ {1}},但您也可以轻松使用自定义double
类:
Result
如果要重复实验,则应使用多图,即如果同一参数集有多个结果。 (但您也可以使用带有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
。