对列表列表中的元素进行分组的最佳方式

Best way to group elements in a list of lists

本文关键字:列表 最佳 方式 元素      更新时间:2023-10-16

我有 4 个排序数据列表。

std::vector<A> aList;
std::vector<B> bList;
std::vector<C> cList;
std::vector<D> dList;

我想找到 aList 和 bList 的唯一值组合。 例如。

aList = {1,1,2,2,2}
bList = {a,b,a,a,a}
cList = {c1,c2,c3,c4,c5}
dList = {d1,d2,d3,d4,d5}

预期产出

{c1,d1},
{c2,d2},
{{c3,d3},{c4,d4},{c5,d5}}

我尝试了一种使用 std::map 的方法,使用 aList 和 BList 的"值对"作为键来获得结果。 这工作正常,但代码看起来很复杂。

是否可以使用类(OOPS(实现相同的目标? 欢迎任何建议。

提前感谢,

维杰

好的,根据评论中的信息,这更有意义。

我有 4 个列表。这些列表包含有关某些 3dmodel 的信息。 aList - 对象颜色列表(RGB 值( bList - 列表 对象的透明度(0-1( cList - 对象列表本身 dList - 对象位置列表 我想对同一对象的所有对象进行分组 颜色和透明度值及其位置 –

事实上,这听起来像是一项注定要通过 OOP 解决的任务。使用单独的列表不是描述性的,并且可能会很快变得混乱。

首先创建一个像"DetailedObject"这样的类,它有一个成员,用于你现在所说的"对象"(3D网格?(,位置和另一个类的成员,我称之为"AlphaColor"。 "AlphaColor"具有成员"颜色"和"透明度",因为您想按颜色和透明度的独特组合进行分组,对吗?

现在,您可以创建如下所示的结果数据结构:

std::map<AlphaColor, std::vector<DetailedObject>>

您会注意到,在您尚未实现 AlphaColor 的哈希函数之前,这不会编译(因为地图需要它(。不过,您应该在网上找到相关说明。

一旦你有了这个,你需要做的最后一件事就是遍历你的所有DetailedObject,然后简单地将它们插入到地图中的相应 std::vector 中,方法是使用它们的AlphaColor成员作为地图的键。

编辑:顺便说一下,您可能会找到一些现成的"RGBA"数据类型,而不是自定义的AlphaColor,因为这是许多对图形执行某些操作的库中的常见用例。