在C++

2010-03-10 39 views
2

代表的关系,我想代表C++代码的关系(表):在C++

  • 关系的列是整数。
  • 关系中的列数在运行时是固定的。
  • 不应该允许重复(这是成本的主要来源)。
  • 我想从名称到关系的地图。

有效实现的任何想法,这里的主要问题是在插入时检测重复项,它可能非常昂贵。

+0

你想要关系中的列的名称,或者是索引好吗? – 2010-03-10 14:44:04

+0

我更喜欢有名字,但是我可以没有他们。 – myahya 2010-03-10 14:46:01

+0

你能描述一下你想要处理的关系吗?例如,如果你的主要目标是做一些聚合的东西,其他模式可能适用。 – 2010-03-10 14:51:18

回答

1

使表中的每一行为struct Row

使用std::setstd::unordered_set来存储这些结构。可以在(对于std::set)O(log n + d)时间或(对于std::unordered_set)摊销O(d)时间中检测碰撞(查询),其中d是列数。

要有效地从名称映射到行,请创建一个boost::bimap<std::string, Row>

+0

但我不知道在编译时行的模式 – myahya 2010-03-10 14:48:12

+0

@myahya:所以对行使用'std :: vector'。 – kennytm 2010-03-10 14:48:57

0

KennyTM有一个点。你可以使用SQLite。如链接中所述,您可以使用它来创建临时内存数据库。

+0

Unicity是一个非常标准的数据库约束... – 2010-03-10 15:15:39

+0

他早些时候做出了这个评论,自那以后我改变了我的帖子。 – 2010-03-10 15:18:12