哪个是存储可变数量变量的最佳方法?

时间:2011-11-26 11:40:21

标签: c++

如果我有一个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我必须擦除(或不store){from {)jet?_mom.Pt()中相应jets_pt的值。

2 个答案:

答案 0 :(得分:1)

我发现您使用的数据结构没有任何问题。 使用std :: vector来保存你的double值绝对是一个很好的方法。 使用std :: map将数据与字符串相关联也是存储关联的好方法。

答案 1 :(得分:0)

如果您关心的是拥有动态变量,并且能够将“id”“链接”到“值”......我认为您最好使用undordered_map / { {1}}。顾名思义,这些不是“排序/排序”。 - 所以在O(1)时间内查找(和插入等)。

特别是当数字变得非常大时,无序地图可能会比普通地图更快。

否则,法线贴图听起来不错。根据您的需要,您应该使用字符串,或者使用密钥的枚举。