我需要在 C++ 中存储整数和双精度值的集合(代表名义值和实值数据)。我显然可以将它们全部存储在 a 中std::vector<double>
,但这感觉有点不对,并且没有获得美学加分。
我也可以根据多态性来做一些事情,但我还需要集合非常高效:在集合中存储和检索数据都应该尽可能快。我发现很难判断这样的解决方案是否会最大限度地提高效率。
我还找到了boost::variant,这在这里可能会有所帮助。
附加信息:集合中的项目数将很小(<100)并且在初始化集合时已知。
总结:我显然可以用无数种方法解决这个问题,但是当(i)效率非常重要并且(ii)我也想编写一些不错的代码时,我不确定什么是一个好的解决方案。我在这里最好的选择是什么?
编辑,附加信息:该集合代表较大数据集中的“行”,其元素代表某些“列”的值。行的属性是已知的,因此知道什么样的数据存储在哪个位置。我所说的“效率”主要是检索某个列的 int/double 值的效率,尽管快速设置值也很重要。我有一些函数可以对需要尽快检索的数据进行操作。例子:
typedef std::vector<double> Row;
void doubleFun(Row const &row)
{
// Function knows there's always a double at index 0
double value = row[0];
...
}
void integerFun(Row const &row)
{
// Function knows there's always an integer at index 1
int value = row[1];
...
}
到目前为止,经过更多思考和阅读建议,似乎将 int 列和 double 列存储在两个单独的向量中是一个可靠的解决方案。然后,该集合Row
可以只定义两个不同的成员来检索函数可以使用的名义数据和真实数据。
我猜只是存储为 avector<double>
也可以,但这取决于 double 和 int 之间的转换速度有多快(这可能令人印象深刻)。
很抱歉一开始有点不清楚,我希望现在更清楚,我可以对此事有更多的想法。