从地图中提取数据有一个好的模式吗?

时间:2017-04-11 08:39:32

标签: c++ stdmap bigdata

我正在使用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));
});

或者还有其他方法可以缩短此重复列表吗?

0 个答案:

没有答案