我正在实施混合热的公式,但我对如何处理这些数据感到困惑(如上图所示)。 我的程序将包括两个下拉列表,我必须从每个下拉列表中选择一个元素。下行列表中的一个将表示第一列的值,另一个下拉列表将表示第一行的值(如上图所示。系统必须从下拉列表中显示所选元素的值。
例如。 如果我想得到表中的碳(C)和氮(N)值-2。我不知道获取该特定值的最简单方法。我应该如何存储这些数据?即我应该使用多维数组,链接列表,字典,数据库等或任何其他方法。
此图表共有73行和73列。
该图表采用XLS格式。 (上图所示的图片只是该图表中的一小部分。)。
答案 0 :(得分:1)
我会使用二维数组。在C ++中,因为你知道你想要多少行/列:
char elementValues[73][73];
原因:
2d数组值具有引用位置的好处,这意味着它们存储在内存中的值彼此非常接近。这意味着您的访问速度会快得多,因为计算机不需要做太多工作。
链接列表为O(n),而数组访问只能是O(1)。原因是每次要查找值时都需要遍历整个列表,而在数组中,您可以直接找到所需的值。
答案 1 :(得分:0)
将所有内容保持为
public Dictionary<string, Dictionary<string, double>> Data;
这样您就不需要处理索引,但可以使用元素名称来获得结果:
var value = Data["Mg"]["B"];
对于serialize dictionary,您可以将数据转换为二维数组,方法是对元素名称进行排序(在您的示例中,它们的排序方式不同,这可能不是最佳的,因为您不希望存储分子质量等,每个元素按那个排序。
答案 2 :(得分:0)
从我得到的是你计划在键的基础上存储值,键本身是两个值的组合。在我看来
unordered_map<std::pair<char,char>, value_type>
可以为您提供良好的插入和查找性能。
所以,如果你想要两个字符组成一个键,那就去
unordered_map<std::pair<char,char>, value_type>.
但是,如果你想用多个键索引相同的数据,那么我建议你选择Boost.MultiIndex。
unordered_map是在hash-table的内部实现的。所以,就插入和查找而言,你会获得良好的性能。