我希望能够在 C++ 中处理类似表格的内容。我指的是“excel 电子表格”或“R dataFrame”中的表格。然而,我的解决方案不需要那么强大。我不需要在运行时添加列,但我将添加行来创建平均值。我正在从各个数据点构建此表,并且将在程序的其他地方读取此表以进行数据分析。我觉得 SQLite 之类的解决方案太过分了。我怎样才能简单地表示这种数据?
为了更轻松地讨论选项,请考虑以下海洋温度表,我们将其称为 data
:
| DataType | DateTime | Location | Temperature |
| ----------- | ---------------- | --------- | ----------- |
| Observation | 2020-07-03_1325 | buoy 3882 | 18.1 |
| Observation | 2020-07-03_1512 | buoy 3882 | 16.6 |
| Observation | 2020-07-03_1701 | buoy 3882 | 15.8 |
| DailyAvg | 2020-07-03_0000 | buoy 3882 | 16.8 |
重要的是我能够访问基于任何属性的数据,这样我就可以(某种程度上)快速收集来自特定位置的所有点、具有相同日期的所有点等。
我考虑过制作一个二维数组(类似于 std::vector< std::vector<boost::any> >
),但这需要用户记住保存他们想要的数据的列的位置。 (例如,对于第二个数据点的温度,用户必须使用 data[1][3]
)。我还考虑过制作一个看起来像这样的结构:
struct DataPoint {
ObservationType observationType;
DateTime dateTime;
std::string location;
double temperature;
}
然后简单地使用 std::vector<DataPoint>
跟踪整个表格。
因此我们提出了我的问题:这些方法中的任何一种都有意义吗?还有其他更有意义的方法吗?
其次,在我看来,数据点是不可变的。防止用户在创建后修改数据是否有意义?如果是这样,最好的方法是什么?
最佳答案
std::vector<DataPoint>
的选项看起来不错。不需要防止数据被修改,用const
就可以了创建后。
如果您需要按位置、温度等快速访问行,您可以根据 map
创建特定索引或更复杂的数据结构。
例如,您可以创建 std::multimap<double, size_t>
其中键是温度,值是表中的行数( vector 中的索引)。然后,您可以使用 std::lower_bound 和 std::upper_bound 检索温度在给定范围内的所有行的索引。
关于c++ - 如何在 C++ 中简单地处理一张表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63062183/