用于存储元组键的数据结构:参数关系列表
Data Structure for storing a tuple key: list of parameters relationship
在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.53
和26353
。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 在与时间一起使用 srand 时,如果我没有time_t参数明确地将参数转换为无符号的 int 参数,这有关系吗?
- 如何根据模板两个整数参数之间的关系对模板进行部分专用化
- 模板参数中的循环依赖关系
- 用于存储元组键的数据结构:参数关系列表
- 使用模板模板参数打破模板循环依赖关系
- 在模板函数参数之间强制执行所需的关系
- 如何将'this'作为参数传递给另一个没有循环依赖关系的类构造函数?