在c/c++中实现未知表模式的数据结构
Data structures to implement unknown table schema in c/c++?
我们的任务是从文件中读取有关表模式的信息,用c/c++实现该表,然后成功地在其上运行一些"select"查询。表模式文件可能包含如下内容:
Tablename- Student
"ID","int(11)","NO","PRIMARY","0","".
现在,我的问题是什么数据结构适合这个任务。问题是我不知道一个表可能有多少列,也不知道这些列的名称是什么,也不知道它们的数据类型。例如,一个表可能只有一个int类型的列,另一个表可能有15个不同数据类型的列。事实上,我甚至不知道模式文件中可能有多少表的描述。
我想到的一种方法是有一组向量,比如20个向量(假设表中列的上限是20个),将这些向量命名为1stvector, 2nvector等等,将列的名称映射到向量,然后相应地使用它们。但是,它的代码似乎会与所有这些if/else语句或switch case语句(用于映射)混淆。
在google上搜索/stack-overflow时,我了解到你不能在运行时描述一个类,否则这个问题可能更容易解决。
任何帮助都是感激的。谢谢。
作为c++数据结构,您可以尝试std::vector< std::vector<boost::any> >
。vector是标准库的一部分,允许动态地重新缩放元素的数量。向量的向量意味着任意数量的行和任意数量的列。提振。Any不是标准库的一部分,但广泛可用,并允许存储任意类型。
我不知道有任何好的c++库可以对该数据结构进行SQL查询。你可能需要自己写一个。例如,SQL命令select
和where
对应于STL算法std::find_if
,并以函数对象的形式传递适当的谓词。
为了处理缺乏关于数据列类型的知识,您几乎必须存储原始输入(即建议std:string
的字符串)并在以后需要时强制解释。
这还有一个好处,即列名可以存储在相同的类型中。
如果你真的想确定列的类型,你需要推测地解析输入的每一列,看看它可能是什么,并在此基础上做出决定。
无论哪种方式,如果输入可以包含一个列,其中有列分隔符号(说一个字符串,包括空格,否则空格分隔的数据),你必须知道输入的引用约定,并编写某种类型的解析来处理数据(吮吸整行与getline
是你的朋友在这里)。
我建议使用std::vector
保存所有的表创建语句。读入所有的创建语句之后,就可以构造表了。
std::vector<std::string>
。您将拥有不同的列类型。一个解决方案是让您的数据类型从单个基派生。这将允许您为表的每一行设置std::vector<Base *>
,其中指针可以指向不同{child}类型的字段。
我将把剩下的留给OP去解决。
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 与 Boost.Asio 同步和并发的数据结构模式
- CRTP 模式 但是在数据结构中存储非同构类型
- Qt 5.2模型视图模式:如何通知模型对象底层数据结构的变化
- 使用二进制模式将数据结构写入文件
- 在c/c++中实现未知表模式的数据结构
- 如何将不同的数据结构集成为一个?任何设计模式或经验