草庐IT

Unordered

全部标签

c++ - 使用 unordered_map 将对象映射为键

我有一个简单的Observable类,实现了观察者模式。此类将模板类型Event映射到已注册的观察者。这一切都很好,尽管出于性能原因我想使用std::unordered_map而不是std::map。如果我将下面的成员变量更改为使用unordered_map,我会得到一个相当普遍的错误:std::map>>_observers;Static_assertfailed"thespecifiedhashdoesnotmeettheHashrequirements"我的期望是std::map和std::unordered_map应该可以互换。在这种情况下使用unordered_map的散列要

c++ - unordered_set::find 的复杂性是否可以预测?

在寻找适合我正在构建的应用程序的容器时,我遇到了unordered_set的文档。考虑到我的应用程序通常只需要insert和find函数,这个类看起来很有吸引力。然而,由于find是O(1)摊销的,但最坏的情况是O(n)-我会经常使用该函数,而且它可能成败我的应用程序。是什么导致了复杂性的飙升?遇到O(n)搜索的可能性是否可预测? 最佳答案 _unordered_set_被实现为哈希表,也就是说,哈希表的一种常见实现是使用哈希桶的容器(例如:likevector)(即是同一桶中unordered_set元素的容器(例如:类似列表)。

c++ - std::unordered_map::operator[] - 为什么有两个签名?

在C++11中,std::unordered_map::operator[]有两个版本,分别是:mapped_type&operator[](constkey_type&k);//1mapped_type&operator[](key_type&&k);//2有两个问题:1)为什么第二个是必要的-第一个允许将常量传递给函数,因为第一个包含关键字const2)例如,在这种情况下将调用哪个版本,1或2:std::unordered_maptestmap;testmap["test"]=1; 最佳答案 通常,键仅用于比较目的,因此您可能想

c++ - 为什么 std::unordered_map 很慢,我可以更有效地使用它来缓解这种情况吗?

我最近发现了一件奇怪的事。似乎用nocachingatall计算Collat​​z序列长度比usingstd::unordered_maptocacheallelements快2倍以上.请注意,我确实从问题Isgccstd::unordered_mapimplementationslow?Ifso-why?中得到了提示并且我尝试使用这些知识来使std::unordered_map尽可能地执行(我使用g++4.6,它确实比g++的最新版本执行得更好,并且我尝试指定一个声音初始值桶数,我让它正好等于map必须容纳的最大元素数)。相比之下,usingstd::vectortocacheafe

c++ - 调整大小后指向元素值的 unordered_map 指针是否有效?

如果我有一个unordered_map(注意someNiceObject不是指针)我有一个API可以插入一个新元素,然后返回指向someNiceObject的指针现在在map上。如果我在map中执行进一步的插入操作,容量可能会发生变化。如果发生这种情况,指针是否仍然有效?我试着阅读Basicquestions:Pointerstoobjectsinunordered_maps(C++),std::unordered_mappointers/referenceinvalidation和http://eel.is/c++draft/unord.req#9找不到必要的信息谢谢大家编辑:指针似

hadoop - pig 数据类型 : Ordered Tuple v/s Unordered Bag

引用OReilly:元组:数据元素的有序集合。Bag:元组的无序集合。我对Pig还很陌生,这可能是一个微不足道的问题,但我需要帮助来理解元组如何是元素的“有序”集合,而包不是。谢谢。 最佳答案 想一想最简单的示例-一个格式良好、未排序的CSV文件。当您将文件读入PIG时,每一行都是一个元组。字段的集合。每个字段都有它的位置;说“第一场”、“第三场”和“最后一场”是有道理的。但是,这些行的顺序是没有意义的。同样,包中元组的顺序是任意的,不能依赖。这里有一个有趣的概念讨论:HowdoIextractthefirsttuplefromag

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

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

c++ - tbb::concurrent_unordered_multimap 中的错误?即使是单线程,条目也会丢失

我的理解是,如果我只使用一个线程,tbb::concurrent_unordered_multimap应该表现得像std::unordered_multimap。但是,在这个例子中,它不会:#include"tbb/concurrent_unordered_map.h"#include#includestructmyhash{size_toperator()(constint&a)const{return1;}};intmain(){tbb::concurrent_unordered_multimaptbbidx;std::unordered_multimapstdidx;for(in

c++ - libstdc++ 对 std::unordered_map 的支持是否不完整?

与thisquestion相关在CodeReview上,我尝试将std::unordered_map与自定义分配器一起使用,但显然这不适用于gcc/clang和libstdc++。该错误可能是通过使用std::allocator初始化空HashMap而产生的#includeintmain(){typedefstd::allocator>A;typedefstd::unordered_map,std::equal_to,A>H;autoh=H{A()};//ERROR,cannotfindconstructorH::H(constA&)}LiveExample.问题:libstdc++是

c++ - R 值插入不适用于 unordered_map

我正在使用来自存储库的最新可用GCC构建。我决定使用它是因为一些额外的C++0x特性。但是现在我坚持了一些应该起作用的东西——我想通过r值添加新元素来映射。简化代码,演示问题:#includeclassX{public:X(void){/*...*/};X(constX&x)=delete;X(X&&x){/*...*/};};intmain(void){std::tr1::unordered_mapmap;//usingstd::tr1::unordered_map::value_typedidn'thelptoostd::pairvalue(1,X());map.insert(st