代码之家  ›  专栏  ›  技术社区  ›  sancho.s ReinstateMonicaCellio

根据组件1、2(和3)对空间(2D/3D)向量排序

  •  2
  • sancho.s ReinstateMonicaCellio  · 技术社区  · 6 年前

    v class T (或者 float double N*D (= npoints*ndims )元素。 例如,对于D=2, 将包含 [ p0[0], p0[1], p1[0], p1[1], p2[0], p2[1], ... pN-1[0], pN-1[1] ] .

    lsort 属于 N 与升序排序相对应的索引,首先根据坐标0,然后根据坐标1对点进行排序。

    例如,如果点(p0…pN-1)是((0,0),(0,1),(1,2),(1,0)),我的意思是:

    v = [ 0, 0, 0, 1, 1, 2, 1, 0 ]
    lsort = [ 0, 1, 3, 2 ]
    

    因为p3的坐标0与p2相同,但坐标1较低。

    我不关心得到一个排序向量(我可以这样做,一旦我有) ).

    我以前做过与自定义操作符的比较,但我不知道如何让比较跳过其他元素。

    1 回复  |  直到 6 年前
        1
  •  2
  •   eerorika    6 年前

    首先生成浮点指针的向量容器(或者:迭代器),其中元素指向每个 D 元素,即每个空间向量的第一维。

    那么 std::sort 使用自定义比较函数的指针向量,该函数对 left[0], right[0] left[1], right[1] 直到最后 left[D-1], right[D-1] 如果之前所有的比较都相等。

    v 从指针向量的每个元素。这将在 v . 除以 D级

    或者,您可以从0到0的索引序列开始 D-1 生成时间 std::iota ,并使用更复杂的比较函数,将索引转换为坐标。