C++异构类型列的表(集合)
C++ table (collection) of heterogenuously types columns
我正在尝试为C++中的表或关系(具有唯一行的无序表)构建数据结构。我以前用过很多次,但自己从未建造过。
因此,该表应该是任意数量的任意类型的列的集合。我可以使用std::vector<some_type>
或一些派生类来表示列。
我的问题是我可以使用什么语言结构来定义总体表数据结构?我意识到我可以以某种方式std::vector<some_type>
包装到某个类中,该类本身可以派生出某个基类,然后将表表示为指向基类的指针向量,但我有点好奇是否有替代方法来表示,也许使用一些模板签名?我宁愿在使用表的列时不要投射太多。
给出一些背景。我很乐意使用我所描述的那种现有的数据结构。我已经看到这样的结构在软件行业中非常积极地与关系代数算法一起使用,但我还没有发现这样的结构在 boost 中。我对在其上实现基本的关系运算符特别感兴趣,例如连接、产品等......
编辑:更多细节。我不想创建具有基于行的内存连续性的数据结构。重要的是,邻接性是基于列的,因此拥有向量集合似乎是正确的做法。
您使用的数据结构可能取决于您最常执行的关系操作。
例如,如果要对两个表执行联接,有多种方法可以执行此操作。 可以使用嵌套循环联接,在这种情况下,无需通过特定键快速访问表中的特定行。 另一方面,如果使用哈希连接,则可以通过给定键快速获取特定行。
但是,选择使用哪种类型的联接是查询优化中的一个相关问题,它有几个因素(数据库中数据的基数估计等)。
但总的来说,我会做以下几点:
- 创建一个对象来表示数据中的行。 此对象可以包含您拥有的不同列的列表。 如果您有通常对其执行操作的单个键,请将其存储在其自己的变量中。 否则,您可以存储列值的哈希集以进行快速查找(这仅在您有很多列时才值得)。
- 让此对象表示数据"行"后,确定最常执行的操作类型。 例如,如果您需要排序的操作,则可以使用 stl map 按特定键存储这些行,该映射实现红黑树,并且可以有效地获取键。 如果您需要在给定时间快速访问特定行(例如,由于查询中的过滤器),则可以使用哈希映射。
tl/dr:以最佳方式存储行取决于您最常期望的操作类型和数据分布。 无论如何,我认为创建一个类来存储"行"的概念是合乎逻辑的,然后您可以根据您的用例使用各种数据结构排列这些行。
- 在C++中,如何创建包含可变模板对象的异构向量?
- 创建异构顶点数据数组的可移植方法
- std::variant vs指向C++中异构容器基类的指针
- C++中的集合(异构类型的数组)
- 从异构列表中提取数据
- Push_back一组(异构)向量的实现
- 使用 std::vector<char> 作为异构记录的存储是否安全?
- 是否可以使用 std::vector<std::any> vec;这将导致异构数据类型
- 异构容器查找 C++98
- 编译时排序的异构元组
- 异构初始化列表
- 派生实例不是指针时的基类的异构容器
- 顺序异构函数执行器
- 我们可以使用异构查找比较器对 STL 关联容器执行"partial-match"搜索吗?
- 异构作业处理器的并行化
- 使用专用函数对异构集合的 STL 算法
- 多重继承和异构集合
- 具有透明比较器和异构意义上的非唯一元素的映射或集合
- 模板异构类型的集合
- C++异构类型列的表(集合)