这是存储可变数量变量的最好方法

Which is the best way to store a variable number of variables?

本文关键字:变量 方法 存储      更新时间:2023-10-16

如果我有一个从数据文件中读取的for循环每次我有一个变量的数量,比如jet1_emfr, jet2_emfr, ...,如果N是这些变量的数量,我使用像

这样的东西
vector<double> jet_emfr;
osstringstream oss;
for( int i = 0; i < N; i++ ){
oss << "jet" << i << "_emfr";
jet_emf.push_back(oss.str());
oss.str("");
}

来存储它们,这是最好的方法吗?如果我想把变量名和它的值联系起来,我的意思是,我创建了一个map

map<string,TLorentzVector> map_jets;
map_jets["jet1"] = jet1_mom;
map_jets["jet2"] = jet2_mom;
map_jets["jet3"] = jet3_mom;
...

并使用vector<pair<string,double> > jets_ptjet1jet1_mom.Pt()给出的值相关联,现在我需要施加一个条件,即每当jet_emfr[i] < 0.4必须擦除(或不存储)jets_pt中对应的jet?_mom.Pt()的值。

我看不出您使用的数据结构有什么问题。使用std::vector来保存双精度值绝对是一种好方法。使用std::map将数据与字符串相关联也是存储这种关联的好方法。

如果所有你关心的是有动态变量,并能够"链接"一个"id"到一个"值"…我认为你最好使用undordered_map/hash_map。顾名思义,这些不是"排序/有序"的。-因此查找(和插入等)在O(1)时间内完成。

特别是当数字变得非常大时,无序映射可能比正常映射更快。

否则,法线映射听起来不错。根据您的需要,您应该使用字符串,或者可能使用enum作为key。