草庐IT

HASH_ALGORITHM

全部标签

c++ - hash_map/unordered_map 的解耦版本

我正在编写一个嵌入式应用程序,不幸的是,我使用的环境目前不支持C++11。我需要实现一个散列/无序映射(出于性能原因,常规std::map无法实现),但似乎无法找到干净利落的方法。Boost不想在不引入几乎整个库的情况下工作。即使是来自SGI的原始STLhash_map也需要多个header,并复制标准库功能,导致函数调用不明确。真是一团糟。为了便于实现、版本控制、质量控制、V&V等。我真的需要一些东西来利用现有的标准库,并且只存在于几个头文件中,我可以将它们放在与所有其他源/相同的文件夹中头文件。这样的事情存在吗,还是我没有希望了?找了半天,还是一无所获。非常感谢您的帮助。如有必要,

Android NDK 不满意链接错误 : "dlopen failed: empty/missing DT_HASH"

我正在使用崩溃报告服务跟踪我们的Android应用程序(使用NDK加载自定义C++库)的崩溃。少数用户遇到以下崩溃:java.lang.UnsatisfiedLinkError:dlopenfailed:empty/missingDT_HASHin"cpplibrary.so"(builtwith--hash-style=gnu?)atjava.lang.Runtime.loadLibrary(Runtime.java:365)atjava.lang.System.loadLibrary(System.java:526)我可以在Internet上找到关于此错误的几次提及(例如这个Goo

C++ 关于 boost::unordered_map & boost::hash 的一些问题

我最近才开始深入研究boost及其容器,我在网络和stackoverflow上阅读了几篇文章,发现boost::unordered_map是大集合中性能最快的容器。所以,我有这个类状态,它在容器中必须是唯一的(没有重复)并且容器中将有数百万甚至数十亿个状态。因此,我一直在尝试针对小尺寸和尽可能少的计算对其进行优化。我之前使用的是boost::ptr_vector,但正如我在stackoverflow上读到的那样,只要其中没有那么多对象,vector就是好的。在我的例子中,状态描述了来自机器人的感觉运动信息,因此可能有大量的状态,因此快速查找是重中之重。关注boostdocumentat

c++ - std::hash 对于不同编译版本和不同机器的相同输入是否给出相同的结果?

我有一些随机测试参数,我需要为其计算哈希值以检测我是否使用相同的参数运行。我可能会使用在不同时间重新编译的相同源代码运行测试,或者在不同的机器上运行。即便如此,我还是想检测运行时是否使用了相同的参数。对于不同的编译版本和不同的机器,std::hash是否为相同的输入给出相同的结果?例如std::hash{}("TestcaseParamVal0.7Param0.4");这将始终是一个唯一的数字吗? 最佳答案 不,std::hash不保证结果在不同的计算机、构建甚至同一计算机上执行相同的构建时都是相同的。您唯一的保证是在一次执行期间,

c++ - 如何 std::hash 一个无序的 std::pair

我希望能够使用std::pair作为unordered_container中的键。我知道我可以通过以下方式做到这一点:templatevoidhash_combine(std::size_t&seed,Tconst&key){std::hashhasher;seed^=hasher(key)+0x9e3779b9+(seed>2);}namespacestd{templatestructhash>{std::size_toperator()(std::pairconst&p)const{std::size_tseed(0);::hash_combine(seed,p.first);::

algorithm - 在数组中找到时间最短的中位数

我有一个数组让我们说a={1,4,5,6,2,23,4,2};现在我必须找到从2到6(奇数总项)的数组位置的中位数,所以我所做的是,我将a[1]转换为a[5]在arr[0]到arr[4]中,然后我对它进行排序并将arr[2]写为中位数。但每次我将值从一个数组放入另一个数组时,我的初始数组的值都保持不变。其次,我已经排序,所以这个过程花费了相当多的**time**。所以我想知道是否有任何不同的方法可以减少我的计算时间。需要了解的任何网站、Material、内容以及如何做? 最佳答案 使用std::nth_element来自这是O(N)

c++ - 如何创建具有 64 位输出的良好 hash_combine(受 boost::hash_combine 启发)

目前Boost有hash_combine函数输出32位无符号整数(准确的说是size_t)。一些引用:http://www.boost.org/doc/libs/1_43_0/doc/html/hash/reference.html#boost.hash_combinehttp://www.boost.org/doc/libs/1_43_0/doc/html/hash/combine.htmlMagicnumberinboost::hash_combine我想探索如何创建64位版本的hash_combine。第一件事是在64位中获得黄金比例或任何其他无理数。第二部分是使用轮类。这部分相

algorithm - 如何压缩指针?例如。任意位指针

我正在编写一个复杂的树数据结构,其中存储了很多指针。指针本身会占用大量空间,而这正是我希望节省的空间。所以我来问问有没有这方面的例子。例如:对于64位数据类型,如果它指向的数据肯定是连续的,我可以使用32位或更少的指针吗?我找到了一篇名为TransparentPointerCompressionforLinkedDataStructures的论文,但我认为可能有更简单的解决方案。更新:这是一个octree.关于GPU的一篇论文是GigaVoxels:AVoxel-BasedRenderingPipelineForEfficientExplorationOfLargeAndDetaile

c++ - std::hash 特化使用 sfinae?

作为练习,我试图看看我是否可以使用SFINAE为std::pair和std::创建一个std::hash特化:tuple当它的所有模板参数都是无符号类型时。我对它们有一点经验,但据我了解,散列函数需要已经使用typenameEnabled=void进行模板化,以便我添加特化。我不太确定从这里去哪里。这是一个不起作用的尝试。#include#include#include#includenamespacestd{templatestructhash,std::enable_if_t::value>>{size_toperator()(conststd::pair&x)const{retu

c++ - std::hash 模板偏特化

我用模板写了一些类:template>classmy_list;我应该为这个类编写::std::hash特化。我怎样才能做到这一点?简单的偏特化:namespacestd{templateclasshash>{public:size_toperator()(constmy_list&x)const{return...;}};}但是我不能写简单的偏特化,因为它被C++ISO禁止:ISO/IEC14882Thirdedition2011-09-0117.6.4.2.1Namespacestd[namespace.std]2ThebehaviorofaC++programisundefine