2010-03-10 2 views
2

Я пытаюсь представить соотношение (таблица) в коде C++:Представляющие отношения в C++

  • Столбцы соотношения являются целыми числами.
  • Число столбцов в отношении фиксировано во время выполнения.
  • Не допускается дублирование (это основной источник затрат).
  • Я хочу иметь карту от имен к отношениям.

Любые идеи для эффективной реализации, основная проблема здесь заключается в обнаружении дубликатов при вставке, это может быть очень дорого.

+0

Вы хотите, чтобы имена для столбцов были связаны, или это индекс Ok? –

+0

Я предпочитаю иметь имена, но я мог обойтись без них. – myahya

+0

Можете ли вы описать, что вы хотите делать с отношениями, которые вы храните? Например, если ваша основная цель состоит в том, что некоторые элементы агрегации могут применяться другими шаблонами. –

ответ

1

Сделать каждую строку таблицы a struct Row.

Используйте std::set или std::unordered_set для хранения этих структур. Столкновение (запрос) может быть обнаружено в (для std::set) O (log n + d) времени или (для std::unordered_set) амортизировано O (d) время, где d - количество столбцов.

Чтобы эффективно отображать от имен к строкам, создайте boost::bimap<std::string, Row>.

+0

Но я не знаю схему строки во время компиляции – myahya

+0

@myahya: Поэтому используйте строки 'std :: vector' для строк. – kennytm

0

У KennyTM есть точка. Вы можете использовать SQLite. Как описано в ссылке, вы можете использовать ее для создания временной базы данных в памяти.

+0

Unicity очень стандартное ограничение базы данных ... –

+0

Он сделал этот комментарий раньше, я сменил свой пост с тех пор. –

Смежные вопросы