我正在编写一个随时间接收数据的程序,我正在寻找数据中的不同模式。
我必须为我在程序中创建的不同进程保存数据以供将来计算, 我想将数据保存到Oracle DB(它支持存储对象)。
我想要与新流程相关的信息具有以下结构: 逻辑表达式列表:
stage 1 ->(a*b*c)+(d*e)+..(can have more conditions)
stage 2 ->(f*a*c)+(a*b)+..
stage 3 ->(g*h*i)+(j*k)+..
每个字母:a,b,c,d等表示具有与之相关的不同参数的逻辑函数,我需要保存这些参数以供将来使用每个逻辑函数。 *表示逻辑AND +表示逻辑OR
问题是如何实施它? 我可以为每个字母创建一个对象,例如对于“a”(可以是需要检查的函数或条件等)并将该对象的数据保存到oracle DB。
可以为每个进程分配一个分子来识别它,但是我不知道如何识别每个逻辑函数(例如“a”),因为我稍后需要将数据库中的数据汇总回原来的我正在处理的过程(例如阶段1)。
关于链表,不确定是否在我的程序中使用它们来表示每个阶段中每个逻辑的结构,例如a-> b-> c->(新OR表达) - > d-> e。或者可能有更好的解决方案?我也可以将此信息保存为字符串,并尝试稍后进行解析
例如string command="stage 1 ->(a*b*c)+(d*e)"
如果我将使用链表,我不知道如何将列表的结构保存到数据库。
对于外部结构,stage1,stage2,stage3等等也不确定是否使用链表以及如何将它们保存到数据库中。 我很感激有关如何构建它的一些建议。 谢谢!
答案 0 :(得分:0)
让我们自下而上构建这个。如果可能,您希望不要编写自己的链表结构。
一个阶段由一个或多个相加的产品组成。
产品是函数或函数对象的指针,我们称之为仿函数。
每组功能对象可以是std::vector<function_object>
。这些组将结果相乘;这可以循环处理。
阶段是上述载体中的一种或多种。这可以表示为:
std::vector< std::vector<function_object> >
您可以为舞台添加另一个尺寸:
std::vector< std::vector< std::vector<function_object> > >
如果您更喜欢使用链接列表,请将std::vector
替换为std::list
。
编辑1:功能ID不是对象
大多数数据库都很难存储函数的代码。因此,您必须使用函数标识符。
函数标识符是与函数关联的数字。此关联将在您的代码中,而不在数据中。最简单的实现是使用函数对象或指针数组。使用函数标识符作为数组的索引,检索函子。
更强大的方法是使用<function_id, functor>
表。此结构允许记录按任何顺序排列,并且可以删除记录而不会损坏代码。使用向量,绝不能删除插槽。
struct Table_Entry
{
unsigned int function_id;
Function_Pointer p_function;
const char * function_name;
};
Table Entry function_associations[] =
{
{5, logic_function_1, "Logic Function 1"},
//...
};