c ++ и oracle DB и связанные списки, какие структуры данных использовать?

0

Я пишу программу, которая получает данные с течением времени, и я ищу разные шаблоны в данных.

Мне нужно сохранить данные для разных процессов, которые я создаю в программе для будущих вычислений, я хочу сохранить данные в 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 и т.д. представляют собой логическую функцию, которая имеет разные параметры, связанные с ней, мне нужно сохранить эти параметры для будущего использования каждой логической функции. * представляет логический И + представляет логический ИЛИ

Вопрос в том, как его реализовать? Я могу создать объект для каждой буквы, например, для "a" (который может быть функцией или условием, которое необходимо проверить и т.д.) И сохранить данные этого объекта в Oracle.

Каждому процессу может быть присвоен числитель, чтобы определить его, однако я не уверен, как идентифицировать каждую из логических функций (например, "а"), потому что мне нужно позже собрать данные из базы данных обратно в исходный процесс, который я (пример 1).

Что касается связанных списков, не уверен, что использовать их в моей программе для представления структуры каждой логики на каждом этапе, например a-> b → c-> (новое выражение OR) → d-> e. или, может быть, есть лучшее решение? Я также могу сохранить эту информацию в виде строки и попытаться выполнить парсинг позже, например, string command="stage 1 ->(a*b*c)+(d*e)"

в случае, если я буду использовать связанный список, я не уверен, как сохранить структуру списков в базе данных.

для внешней структуры, stage1, stage2, stage3.. и т.д. не уверены также, если использовать связанные списки и как сохранить их в базе данных. Я был бы признателен за некоторые советы о том, как его построить. Благодарю!

Теги:
algorithm

1 ответ

0
Лучший ответ

Позвольте построить это снизу вверх. Вы хотите воздержаться от написания собственных структур связанных списков, если это возможно.

Этап состоит из одного или нескольких продуктов, которые суммируются.

Продукты представляют собой указатели на функции или объекты функций, называя их функторами.

Каждая группа объектов функций может быть std::vector<function_object>. У этих групп результаты будут умножены; которые могут обрабатываться в цикле.

Этапом является один или несколько из вышеуказанных векторов. Это можно выразить так:
std::vector< std::vector<function_object> >

Вы можете добавить другое измерение для этапов:
std::vector< std::vector< std::vector<function_object> > >

Если вы предпочитаете использовать связанный список, замените std::vector на std::list.

Изменить 1: Идентификаторы функций не объекты
Большинство баз данных имеют сложное время хранения кода для функции. Таким образом, вам придется использовать идентификаторы функций.

Идентификатор функции - это число, связанное с функцией. Эта связь будет в вашем коде, а не в данных. Простейшая реализация заключается в использовании массива объектов-объектов или указателей. Используйте идентификатор функции в качестве индекса в массиве, чтобы получить функтор.

Более надежным методом является использование таблицы <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"},
  //...
};
  • 0
    Привет, Томас, спасибо за ответ, я хочу построить его таким образом, чтобы каждый процесс был полностью зарезервирован в базу данных (в случае сбоя или в случае, если я хочу повторно использовать процесс). как это сделать?
  • 0
    Привет, Томас, если я правильно понимаю, то, что ты предлагаешь, также может быть достигнуто с помощью STL MAP ("logic_function_1", указатель на функцию 1), MAP ("logic_function_2", указатель на функцию 2) и т. Д., Где 1,2 - числители объекты в базе данных или имена. однако я не понимаю, как сохранить структуру процесса в БД, например, «этап 1 -> (a b c) + (d * e)», предполагая, что «a» .. «e» уже хранится в БД с именами или числителями, что я знаю, как получить к ним доступ, спасибо
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню