c++ - 对列表列表中的元素进行分组的最佳方法
问题描述
我有 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 - 对象位置列表 我想将所有具有相同颜色和透明度值的对象分组与它的位置 -</p>
事实上,这听起来像是注定要通过 OOP 解决的任务。使用单独的列表不是描述性的,并且很快就会变得混乱。
首先创建一个像“ DetailedObject
”这样的类,它有一个到目前为止你称之为“对象”的成员(3D 网格?),我称之为“ AlphaColor
”的另一个类的位置和成员。" AlphaColor
" 有成员 "color" 和 "transparency",因为您想按颜色和透明度的独特组合进行分组,对吗?
现在您可以制作这样的结果数据结构:
std::map<AlphaColor, std::vector<DetailedObject>>
您会注意到,在您没有为 AlphaColor 实现哈希函数之前,它不会编译(因为地图需要它)。不过,您应该在网上找到相关说明。
一旦你有了它,你需要做的最后一件事就是循环所有你的DetailedObject
并简单地将它们插入到地图中相应的 std::vector 中,使用它们的AlphaColor
成员作为地图的键。
编辑:顺便说一句,您可能会找到一些现成的“RGBA”数据类型,而不是自定义的 AlphaColor,因为这是许多处理图形的库中的常见用例。
推荐阅读
- php - 运行 composer update 后 Laravel 应用程序 $_ENV 数组为空
- objective-c - 将图像从 xcassets 加载到 NSImage
- drone - 在管道之间传递值
- python - 使用 PowerShell 或 CMD 在 python 中自动化第三方库
- swift - 将参数传递给子视图时预览崩溃
- python - 如何在matplotlib的直方图中居中标签
- node.js - 更改 node-modules 文件夹中的 npm 模块
- scala - 如何使用 spark 从嵌套的 json 数组中获取值?
- android - 迁移到 sdk 30 android 11 后获得额外空间
- vim - 在 Vim 中为一行的每个单词添加或减去一个数字