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

Data Structure for storing a tuple key: list of parameters relationship

本文关键字:参数 关系 列表 数据结构 存储 元组 用于      更新时间:2023-10-16

在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函数能够快速访问通过输入温度、湿度等访问的类中的结构。

在我看来,你想使用一个std::map,其中std::tuple作为键,或者一个保存参数的自定义类,以及一个存储实验结果的映射类型(这里是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.5326353