C++ 将二维向量分成组

C++ splitting two dimensional vector into groups

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

我允许用户 select 根据哪个字段进行分组。我不知道实现这一目标的最佳方法。

如果 selected 字段不包含足够的一致性,我不想分组。示例:

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

在上面的示例中,按名称分组应该不会通过,因为数据的可变性太大。而类型是有效条件。我怎样才能实施这种类型的检查?我正在考虑跟踪每个组字段有多少个实例?

是否不需要将每个组存储在其单独的向量中?

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

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

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

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

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

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

不,没有必要将每个属性存储在它自己的向量中(但它会起作用)。 其他解决方案: 创建一个 struct/class 来保存您的数据并将该 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}

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

为每个组创建单独的散列或映射。每个 hash/map 将存储指向您的对象的指针。

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