草庐IT

hash_equals

全部标签

c++ - 字符串的双向 "Hashing"

我想从字符串生成int并能够生成它。类似于散列函数但双向函数。我想在我的应用程序中使用整数作为ID,但希望能够在记录或调试时将其转换回来。喜欢:intid=IDProvider::getHash("NameOfMyObject");object*a=createObject(id);...if(error){LOG(IDProvider::getOriginalString(a->getId()),"somemessage");}我听说过稍微修改过的CRC32可以快速且100%可逆,但我找不到它,我自己也写不出来。任何提示我应该使用什么?谢谢!编辑我刚刚找到了来源,我从以下位置获得了整

c++ - 我可以使用成员变量作为 hash_set/hash_map 的键吗?

我有这样一个类:classFoo{longlongId;stringx;stringy;//othermembervariablesandfunctions};我想将其存储在hash_set中(或hash_map),但使用Id成员变量作为插入和搜索的键。我不确定我该怎么做。我想到了以下几种方法,但都不是很好:1)我可以编写一个自定义散列函数,使用Id对对象进行散列,但我不能使用find()hash_set上的方法通过Id(longlong)查找项目,因为它需要Foo要传入的对象。2)我可以复制Id并创建一个hash_map而不是hash_set但我有1亿个这些对象的实例,所以我不想复制

c++ - 使用 Wfloat-equal 选项将 float 与 1 或 0 进行比较

我对在代码中执行浮点相等比较的问题有些熟悉。目前我在(GCC,Clang)上编译的代码库启用了以下选项:-Wfloat-equal在代码库中有以下示例比较:templatevoidfoo(FloatTypev){if(v==FloatType(1)){...}elseif(v==FloatType(0)){....}}foo函数调用如下:doubled=123.98;floatf=123.98f;foo(d);foo(f);考虑到1和0的特殊情况,它们每个都有精确的浮点表示(double,float)并且代码显然在完全相等之后,而不是接近于一些次要的东西区别-有没有一种方法可以重写代码

c++ - BOOST_CHECK_EQUAL(和衍生品)添加自定义消息

我们最近开始使用BoostTest框架,到目前为止很喜欢它。但是,在某些测试中,如果我们可以将自定义消息添加到现有帮助程序,那将会很棒。例如,我可以在mytest和mytest2中获取输出,但在mytest3中找不到输出:#defineBOOST_TEST_MODULEmytests#includeBOOST_AUTO_TEST_SUITE(myunit)BOOST_AUTO_TEST_CASE(mytest){//Thisgiveaniceoutput[2+2!=5]BOOST_CHECK_EQUAL(2+2,5);}BOOST_AUTO_TEST_CASE(mytest2){//T

c++ - 为模板化 key 专门化 std::hash

我试图为我自己的类型专门化哈希,一个模板化的键。我是基于cppreference.我收到编译错误“C++标准不提供此类型的散列”。我想我只是做错了。编译器甚至可以支持这种模板吗?namespacestd{templatestructMyKey{constSTypefrom;constATypeconsume;constPTypepop;};templatestructhash>{size_toperator()(MyKeyconst&key){std::hash()(key.from);std::hash()(key.consume);std::hash()(key.pop);}};}

c++ - boost hash 为不同的输入返回相同的值

我有两个对象,Account和Transaction,其中Transaction是唯一的一对Account和一个递增的ID号。我想使用boost::hash来获取这些的唯一值,并根据说明重载hash_value方法:http://www.boost.org/doc/libs/1_53_0/doc/html/hash/custom.htmlclassAccount{...};classTransaction{Accountaccount;unsignedintid;};Account的hash_value方法工作正常,并且返回的值对于给定的帐户始终是唯一的,但是要生成唯一的对,Trans

c++ - std::equal 与 reverse_iterator

将reverse_iterator与std::equal一起使用是否合法?例如,这些是否合法?std::equal(v.begin(),v.end(),w.rbegin())std::equal(v.rbegin(),v.rend(),w.begin())std::equal(v.rbegin(),v.rend(),w.rbegin()) 最佳答案 所有都是有效的,因为反向迭代器是,事实上,正向迭代器。“反向迭代器”不是迭代器类别。记住一些迭代器类别:可以取消引用(*)和递增(++)的迭代器是前向迭代器。也可以递减的前向迭代器是双向

c++11 std::hash 函数对象类线程安全

在c++11中是在中声明的散列函数类对象线程安全?例如,从多个线程调用此函数是否安全?size_thash1(conststd::string&s){std::hashstr_hash;returnstr_hash(s);}或者,如果有一个全局对象std::hashstr_hash_global;,那么从多个线程调用第二个函数是否安全?size_thash2(conststd::string&s){returnstr_hash_global(s);} 最佳答案 标准库promise,如果您只在标准库对象上调用const限定的成员函数

c++ - 我可以覆盖 std::hash 吗?

我可以用我自己在C++11中定义的std::hash替换std::hash的实际实现吗?我的意思是从我的代码库开始,不涉及标准库。在这种情况下我看不到虚函数/多态性有任何用处,所以我想我无论如何都不能改变std::hash的定义? 最佳答案 您可以为特定类型专门化哈希。参见here和here例如像这样namespacestd{templatestructhash{size_toperator()(constFoo&x)const{/*yourcodehere,e.g."returnhash()(x.value);"*/}};}如果你

C++11 使用带有自定义比较函数的 std::equal_range

考虑这个例子(请注意,这只是我为了说明问题而编造的东西。我很清楚有更有效的方法来解析算术表达式,虽然这个主题很吸引人,但这与我的实际无关问题。这只是一个半现实的例子,如果我可以这样说的话。我同意解析器可能会使问题看起来更复杂,但我想不出更抽象的例子)。假设您想做一个简单的表达式解析器。您将从分词器中获取一些字符串,其中一些可能不明确。例如,字符串“-”可以表示一元减号或二进制减号。假设您想获得字符串“-”的所有可能含义。你可以这样做:1)定义一个描述所有可能运算符的排序数组//typesofoperatorsenumclassopType:char{unary,lasso,rasso,