C ++将二维向量分成组

时间:2015-07-16 14:30:07

标签: c++ vector stdvector

我试图通过函数(来自sql)实现一个组,使用表示数据源的字符串的二维向量。

我允许用户选择要分组的字段。我不知道实现这一目标的最佳方法。

如果所选字段没有足够的一致性,我不想分组。示例:

ID  | name  | type
1   | Sam   | a
2   | Alex  | b
3   | Tom   | b
4   | Ryan  | a

通过上面的例子,按名称分组不应该通过,因为数据的可变性太大。而类型是有效条件。我怎么能实现这种类型的检查?我想跟踪每个组字段有多少个实例?

是否没有必要将每个组存储在各自的向量中?

1 个答案:

答案 0 :(得分:0)

让我们回答你的第一个问题。 如何确定属性是否有效以进行分组。

您想要低变异性。 您需要一个指标,告诉您是否应该能够按该属性进行分组。

一个非常简单的指标是找到属性中唯一元素的数量,并除以该属性中元素的总数。 (1表示所有元素不同1 /(元素数)表示所有元素都相同)

因此,您可以设置天气阈值,或者不按该数字对属性进行分组。

在你的例子中: name有4个元素中的4个独特元素。它的分数是1 type有4个元素中的2个独特元素。它的得分为0.5

请注意,此指标在小型数据集上的效果可能不佳。

不,没有必要将每个属性存储在它自己的向量中(但它会起作用)。 其他方案: 创建一个struct / class来保存数据并将该类存储在一个向量中。

vector[0] => {id: 1, name: Sam, type: a}
vector[1] => {id: 2, name: Alex, type: b}
vector[2] => {id: 3, name: Tom, type: b}
vector[3] => {id: 4, name: Ryan, type: a}

然后,您可以根据特定键(即基于类型)进行分组

为每个组创建单独的哈希或映射。每个哈希/映射都会存储指向对象的指针。

type_hash [0] => List of pointers to data objects with type a
type_hash [1] => List of pointers to data objects with type b