我正在使用c ++来处理数据并为它们创建各种直方图。直方图定义存储在我读入的json文件中,并转换为“直方图名称(std :: string)到直方图对象(直方图对象)”映射。
我稍后将此地图传递给一个对象,其目的是用数据填充这些直方图。但是我不能在那里使用直方图对象作为地图,因为通过字符串标识符查找其中的每个直方图相当慢。因此,该类保持指向它需要填充的每个直方图的指针实例。性能不会受到这种影响,这会大大加快运行时间。但是,要做到这一点,我需要编写很多我认为是垃圾代码的东西。
直方图声明是必要的,但是我可以以某种方式提高从地图中提取的可读性吗?
现在提到的部分有几百行像这样:
sensorEfficiencyWithCutsPhiVsZ_l4 = checkGetHistoFromMap("sensorEfficiencyWithCutsPhiVsZ_l4");
sensorEfficiencyWithCutsPhiVsZ_fwd = checkGetHistoFromMap("sensorEfficiencyWithCutsPhiVsZ_fwd");
rechitPhiVsZ_l1 = checkGetHistoFromMap("rechitPhiVsZ_l1");
rechitPhiVsZ_l2 = checkGetHistoFromMap("rechitPhiVsZ_l2");
rechitPhiVsZ_l3 = checkGetHistoFromMap("rechitPhiVsZ_l3");
rechitPhiVsZ_l4 = checkGetHistoFromMap("rechitPhiVsZ_l4");
rechitPhiVsZ_fwd = checkGetHistoFromMap("rechitPhiVsZ_fwd");
vtxNtrkNumhitsPreCuts = checkGetHistoFromMap("vtxNtrkNumhitsPreCuts");
vtxNtrkEfficiencyPreCuts = checkGetHistoFromMap("vtxNtrkEfficiencyPreCuts");
nMinus1VtxNtrkNumhits = checkGetHistoFromMap("nMinus1VtxNtrkNumhits");
nMinus1VtxNtrkEfficiency = checkGetHistoFromMap("nMinus1VtxNtrkEfficiency");
nMinus1PtNumhits = checkGetHistoFromMap("nMinus1PtNumhits");
nMinus1PtEfficiency = checkGetHistoFromMap("nMinus1PtEfficiency");
我能否以某种方式将此缩短为:
std::vector<HistogramPointerType> histograms = { long list of histogram names };
std::for_each(histograms.begin(); histograms.end(), [this] (HistogramType histogram)
{
this -> (name of the histogram) = checkGetHistoFromMap((name of histogram as converted to string));
});
或者还有其他方法可以缩短此重复列表吗?