gpt4 book ai didi

c++ - 将元素存储在具有两个可能索引的集合中

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:52 24 4
gpt4 key购买 nike

我需要针对特定​​情况的解决方案。我有一个基本上适用于线段的算法。我只知道线段的终点和起点。 (点有 2 个坐标 x,y。这些是图像上的像素点。我也知道图像的大小。)我想检查这些线段并对其进行处理。但是,我还需要跟踪检查过的线段,这样我就不会再次检查同一条线段。我正在使用 C++,所以我想使用 STL 集容器。

我的问题是如何根据它们的终点和起点存储这些线段?我需要为终点和起点生成唯一编号。 (此外,除了使用 STL set 之外,我愿意接受任何其他建议 :))

一个可能的解决方案是我通过以下方式为这两个像素生成索引号:(y*image->Witdh) + x。然后我得到两个索引号(顺便说一句,它们是整数。)然后我通过以下方式连接这些数字:(indexStart << 32)+ indexEnd。(我得到双)。现在我有了唯一的编号,我可以很容易地存储在集合中。但问题是在我的搜索中,一旦线段的起点可以成为同一线段的终点。如果我从端点遇到相同的线段,则连接的线段唯一编号变为 (indexEnd << 32) + indexStart。然后我将相同的线段添加到我需要避免的设置容器中。

感谢您的任何建议。

最佳答案

您可以保留您的解决方案或使用 operator< .你的优势在于切换到一些哈希集实现是微不足道的,另一个应该是总体上更好的实践(更容易理解,可能更快,可以与 64 位坐标一起使用,等等)。

只需通过不区分 start 来解决您描述的问题(您必须为两个方法执行此操作)和 end但是lowerupper坐标。总是在同一个地方使用较小的坐标是一个很容易解决的问题,当你以相反的方式发现它们时,会得到假阳性的不同片段

关于c++ - 将元素存储在具有两个可能索引的集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10482376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com