在“集合”中有效地搜索相邻元素对

时间:2014-03-16 00:28:12

标签: c++ algorithm data-structures

我目前正在处理一个问题,我想维护一组线性函数的convex hull。它可能看起来像这样:

enter image description here

我使用set<Line>来维护线条,以便我可以动态插入线条,这样可以正常工作。这些线是通过增加斜率来排序的,斜率由线的operator<定义。通过抛弃&#34;取代&#34;在数据结构中,数据结构保证每条线都有一些是凸包的一部分。

现在问题是我想在这个数据结构中搜索X坐标在给定 x 之前的交叉点。由于这些交叉点只是通过集合中的邻接来明确定义(在上图中,那些是点NQ等),它似乎完全是仅凭set无法解决,因为我没有

  • 通过主要比较功能
  • 以外的任何方式查找元素的选项
  • &#34;二元搜索&#34;的选项在我自己的底层搜索树中,即计算迭代器的预订前任或后继者
  • 有效按索引访问元素的选项

因此我倾向于使用第二个set<pair<set<Line>::iterator, set<Line>::iterator> > >,但这看起来非常难看。看到我们主要需要这个用于编程竞赛,我想最小化代码大小,所以我想避免第二组或自定义BBST数据结构。

是否有一种很好的方法来模拟这种情况仍然让我通过相邻元素上的函数值动态二进制搜索来维护线条,并且具有合理数量的代码?

0 个答案:

没有答案