bwe*_*r13 2 c++ datatable data-structures
我希望能够处理像 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 |
Run Code Online (Sandbox Code Playgroud)
重要的是,我能够访问基于任何属性的数据,以便我可以(在某种程度上)快速收集来自特定位置的所有点、具有相同日期的所有点等。
我已经考虑过制作一个二维数组(类似于std::vector< std::vector<boost::any> >),但这要求用户记住保存他们想要的数据的列的位置。(例如,对于第二个数据点的温度,用户必须使用data[1][3])。我还考虑过制作一个看起来像这样的结构:
struct DataPoint {
ObservationType observationType;
DateTime dateTime;
std::string location;
double temperature;
}
Run Code Online (Sandbox Code Playgroud)
然后简单地使用 std::vector<DataPoint>来跟踪整个表。
因此,我们提出了我的问题:这两种方法中的任何一种都有意义吗?还有另一种更有意义的方法吗?
其次,在我看来,数据点是不可变的。防止用户在创建后修改数据是否有意义?如果是这样,最好的方法是什么?
选项std::vector<DataPoint>看起来很不错。您不需要阻止数据修改,只需使用const创建后。
如果您需要按位置、温度等快速访问行,您可以根据以下内容创建特定索引 map或更复杂的数据结构。
例如,您可以创建std::multimap<double, size_t>其中键是温度而值是表中的行数(向量中的索引)。然后,您可以使用 std::lower_bound 和 std::upper_bound 检索温度在给定范围内的行的所有索引。
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |