首页 > 解决方案 > 对列表列表中的元素进行分组的最佳方法

问题描述

我有 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)来实现相同的目标?欢迎任何建议。

提前致谢,

维杰

标签: c++listoop

解决方案


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

我有 4 个列表。这些列表包含有关某些 3dmodel 的信息。aList - 对象颜色列表(RGB 值) bList - 对象透明度列表(0-1) cList - 对象本身列表 dList - 对象位置列表 我想将所有具有相同颜色和透明度值的对象分组与它的位置 -</p>

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

首先创建一个像“ DetailedObject”这样的类,它有一个到目前为止你称之为“对象”的成员(3D 网格?),我称之为“ AlphaColor”的另一个类的位置和成员。" AlphaColor" 有成员 "color" 和 "transparency",因为您想按颜色和透明度的独特组合进行分组,对吗?

现在您可以制作这样的结果数据结构:

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

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

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

编辑:顺便说一句,您可能会找到一些现成的“RGBA”数据类型,而不是自定义的 AlphaColor,因为这是许多处理图形的库中的常见用例。


推荐阅读