草庐IT

unordered-multiset

全部标签

c++ - unordered_map 的最坏情况是什么?

我找到了很多关于map和unordered_map的复杂性的帖子。据说unordered_map的最坏情况复杂度为O(N)。出于我的目的,我将输入排序值,如125691112..。我需要插入或查找并删除一个值。我将不得不经常插入/删除。我想过使用set,它在所有情况下都具有log(n)的复杂性。然后我偶然发现了具有最佳O(1)复杂度的unordered_map。但是我需要了解在我的场景中我会面临unordered_map的最坏情况吗?又会是怎样的场景?编辑:在我的例子中,所有值都是唯一的。 最佳答案 unordered_map最坏的

c++ - 如何实现用于 std::unordered_map 的 CString 哈希函数?

我要声明:std::unordered_mapm_mapMyMap;但是当我构建时,我得到一个错误,告诉我标准C++没有为CString提供散列函数,而CString有(LPCSTR)运算符。如何正确实现CString的哈希函数? 最佳答案 基于std::string的MSSTL实现,我创建了以下可用于std::unordered_set和std::unordered_map的方法:namespacestd{templatestructhash{//hashfunctorforCStringsize_toperator()(cons

c++ - 将具有指针值类型的 unordered_map 上的迭代器转换为具有 const 引用值类型的同一映射上的迭代器

我有以下类(class):#include#includeclassNode{public:typedefstd::unique_ptrptr_type;typedefstd::unordered_mapmap_type;typedef/**???**/const_iterator;const_iteratorbegin()const;const_iteratorend()const;private:map_type_children;};如您所见,我想要一种方法让此类的用户遍历_children的元素。而无法修改它们。这就是为什么我想创建一个指向pair类型元素的迭代器的原因而不是p

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找不到必要的信息谢谢大家编辑:指针似

c++ - std::multiset<A,B> 的模板参数A、B分别是什么意思,是如何工作的?

我在另一个关于std::multiset的问题中问过,但现在我发现我需要一个体面的理解并且在互联网上找不到任何更复杂的例子。你能给我解释一下吗,也许举例说明,如何std::multiset有效,A和B的功能是什么,以及是否可以省略其中的任何一个?我可以将A或B放入某个变量吗?我真的很感激一些简短的例子或引用, 最佳答案 std::multiset类模板的第一个模板参数指定要存储在集合中的对象类型,第二个模板参数指定比较仿函数的类型。我们现在可以忽略第三个模板参数。第二个可选参数,B,必须实现strictweakordering并用于

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

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