草庐IT

imap_unordered

全部标签

c++ - unordered_map 在 VS10 中抛出 bad_alloc 但在 VS9 中没有,这是一个错误吗?

同时writingapost关于projecteuler's14thproblem我遇到了VC9和VC10之间的行为差​​异。以下代码在VC9中运行正常,但在VC10中std::unordered_map抛出bad_alloc异常。奇怪的是,如果我从异常中恢复过来,future的分配将会成功(容器的大小继续增长)。另外,如果我使用boost::unordered_map,它在两个编译器中都能正常工作。关于实际内存使用情况,我在一台有4GBRAM的机器上运行(正在使用1.7),VC9版本在完成任务之前获得了大约810MB的内存,而VC10版本在大约658MB时崩溃了。这是VC10中的错误

c++ - unordered_map 使用什么位散列函数?

C++0x的unordered_map默认使用什么位散列?std::hash函数返回size_t。这是否意味着unordered_map使用16位哈希函数? 最佳答案 std::unordered_set默认使用std::hash。如果std::size_t对你来说是16位的,那么我猜它确实使用了16位哈希。在16位机器上,我希望unordered_map::max_size()足够低以至于使用这样一个弱散列不会有问题。 关于c++-unordered_map使用什么位散列函数?,我们在

c++ - 如何使用非 STL 类型(例如来自 ICU 的 UnicodeString)创建 unordered_map?

我希望能够做到这一点:std::unordered_mapmymap;但是,当我这样做(并且开始使用它)时,我遇到了“无法将size_t转换为UnicodeString”的错误。所以我环顾四周,readuponunorderedcontainers.这篇博文指出我需要提供std::hash的特化,所以我就是这么做的:namespacestd{templateclasshash{public:size_toperator()(consticu::UnicodeString&s)const{return(size_t)s.hashCode();}};};虽然不完美,但满足要求。但是,现在我

使用 g++ 4.6 和 boost::unordered_map 的 C++11 相关编译错误

我有一段C++代码会因编译错误而失败,除非它在​​C++11模式下运行,但我无法弄清楚为什么会这样,因为代码没有(明确地)使用C++11特点:#include#include#includestructSomeStruct{boost::unordered_mapintMap;};intmain(intargc,constchar*argv[]){std::vectorvals;vals.resize(100);}在使用gcc4.6.3-1ubuntu5和boost1.48的Ubuntu12.0464位机器上编译时:g++test.cpp然后我得到这个编译错误:Infileinclud

c++ - 将某些内容存储到 unordered_map 时出现浮点异常

我正在使用unordered_map作为C++中的HashMap,但每当我尝试在其中存储任何内容时,我都会得到:Floatingpointexception:8谁能指出错误是什么?以下是我如何初始化我的map(table_entry只是一个结构):std::tr1::unordered_mapforwarding_table;然后我在做一个条目:unsignedshortdest_id=0;table_entry*entry=(table_entry*)malloc(sizeof(table_entry));forwarding_table[dest_id]=entry;我的结构定义是

c++ - 遍历 unordered_set 的效率如何?

遍历unordered_set是否需要查看哈希表的每个桶?如果是这样,那不是很低效吗?如果我想频繁迭代一个集合但仍然需要在O(1)时间内删除,unordered_set仍然是最好的数据结构吗? 最佳答案 碰巧,std::unordered:set的常见实现将所有元素链接在一起,就像std::forward_list所做的那样,因此遍历容器基本上是等价的遍历列表(详情here)。在任何情况下,如有疑问,请分析您的程序并查看结果是否满足您的需求。 关于c++-遍历unordered_set的

c++ - C++ 标准是否为 unordered_set 定义了桶的结构?

当计算出unordered_set中某个元素的哈希值时,它会与其他不同但哈希值相同的元素一起放入“桶”中。我的经验是,这样一个桶中的元素是存储在一个单向链表中的。这意味着,在哈希函数不佳的存储桶内搜索时,它会变得非常慢。单向链表是标准的要求还是只是一种可能的实现方式?可以用set作为桶来实现unordered_set吗? 最佳答案 标准规定了要求和保证,但没有明确强制底层数据结构和算法。N4140§23.2.5[unord.req]/1Unorderedassociativecontainersprovideanabilityfor

C++:替换我们有迭代器的 std::unordered_set 中的元素

我有一个指向某些对象的指针的std::unordered_set。该集合具有自定义哈希和等价函数,s.t.即使对象在“所有成员都相等”的意义上不相等,对象也可以关于集合是相等的。现在我想插入一个新对象。如果集合中已经存在等效对象,当且仅当对象的“其他”成员(即不属于散列/相等性检查的一部分)的某些条件为真时,我希望替换旧对象。如果我决定更换对象,我想知道如何最有效地做到这一点。我觉得整个过程应该可以通过一次HashMap查找来完成。我目前最好的方法是:首先,调用set.insert(new_object)。如果这实际上插入了对象,我们就完成了。(这需要我们进行一次HashMap查找。)

c++ - std::unordered_map:多线程插入?

我有一堆数据(一个巨大的0到ULLONG_MAX之间的整数列表),我想提取所有唯一值。我的方法是创建一个unordered_map,使用整数列表值作为键,使用一次性bool值作为映射值。我迭代列表并为每个键插入一次性值。最后,我迭代map以获取所有唯一键。非常简单。但是,我的列表非常大(数以亿计),我想对这个进程进行多线程处理。我知道一种天真的线程方法是行不通的,因为unordered_map插入会影响底层数据结构,因此它不是线程安全的。并且在每次插入周围添加锁会很慢,并且可能会抵消任何线程加速。然而,大概不是每次插入都会改变数据结构(只有那些不能适应现有分配桶的插入?)。有没有办法在

c++ - 在唯一键上 boost unordered_multimap 循环

在boostunordered_multimap中遍历唯一键的最简单方法是什么。例如我有这个:std::setused;for(autop:valuesMap){if(used.count(p.first))continue;used.insert(p.first);autorange=valuesMap.equal_range(p.first);if(p.first)for(autov=range.first;v!=range.second;++v)//dosomething;}有没有更好的方法来做到这一点。似乎无序映射应该已经知道唯一键。 最佳答案