代码之家  ›  专栏  ›  技术社区  ›  JRR

用于插入std::无序_集合的三维整数坐标的唯一键

  •  -1
  • JRR  · 技术社区  · 5 年前

    std::set . 允许 x y z 三岁 int registry 做一个 std::set< std::array<int, 3> > bool 那样

    std::array<int, 3> key = {x, y, z};
    return registry.insert(key).second;
    

    unordered_set array<int,3> as键在进行比较时效率不高 insert

    无序集 boost::hash_combine 以及其他选择。

    我怎样才能使用一台电脑

    2 回复  |  直到 5 年前
        1
  •  1
  •   Lightness Races in Orbit    5 年前

    消灭

    int It’那就做个决定吧 struct 有三个 它在里面。或通过 std::array<int, 3> 围绕

    然后再测量一次,看看会发生什么。你可能会发现这一套现在很好。如果不是,那么,您可以为三个 s不过,不要费心去尝试一个总是提供唯一值的散列函数,因为这实际上违背了散列函数的目的。

    如果这仍然太慢,那么你可能想考虑为这个问题想出一个合适的算法,因为Stand和unOrdEdSub集合仍然会动态地分配节点。这只是一个间接层次,而不是现在的两个层次,但是零总比没有好。

        2
  •  0
  •   JRR    5 年前

    std::unordered_* . 我曾经 boost

    #include <boost/functional/hash.hpp>
    

    我定义了我的 registry

    typedef std::array<I32,3> Array;
    std::unordered_set<Array, boost::hash<Array> >
    

    我获得了约33%的计算时间。