草庐IT

unordered_multimap

全部标签

c++ - 不能使用枚举类作为 unordered_map 键

我有一个包含枚举类的类。classShader{public:enumclassType{Vertex=GL_VERTEX_SHADER,Geometry=GL_GEOMETRY_SHADER,Fragment=GL_FRAGMENT_SHADER};//...然后,当我在另一个类中实现以下代码时...std::unordered_mapshaders;...我得到一个编译错误。...usr/lib/c++/v1/type_traits:770:38:Implicitinstantiationofundefinedtemplate'std::__1::hash'是什么导致了这里的错误?

c++ - 如何在 map 和 unordered_map 之间进行选择?

假设我想以字符串为键映射数据。我应该选择哪个容器,map还是unordered_map?unordered_map占用更多内存,所以我们假设内存不是问题,关注的是速度。unordered_map通常应该给出O(1)的平均复杂度,最坏的情况是O(n)。在什么情况下会达到O(n)?map什么时候比unordered_map更省时?当n小时会发生这种情况吗?假设我将使用STLunordered_map和默认的haserVs。map。字符串是关键。如果我要遍历元素而不是每次都访问单个元素,我应该更喜欢map吗? 最佳答案 |map|unor

c++ - C++ 标准委员会是否打算在 C++11 中 unordered_map 破坏它插入的内容?

我刚刚失去了三天的生命来追踪一个非常奇怪的错误,其中unordered_map::insert()破坏了您插入的变量。这种非常不明显的行为只发生在最近的编译器中:我发现clang3.2-3.4和GCC4.8是唯一编译器来展示这个“特性”。以下是我的主要代码库中的一些简化代码,用于演示该问题:#include#include#includeintmain(void){std::unordered_map>map;autoa(std::make_pair(5,std::make_shared(5)));std::cout我可能和大多数C++程序员一样,希望输出看起来像这样:a.second

c++ - 在 std::map 和 std::unordered_map 之间进行选择

这个问题在这里已经有了答案:Isthereanyadvantageofusingmapoverunordered_mapincaseoftrivialkeys?(15个回答)关闭4年前。既然std在unordered_map中有一个真正的HashMap,为什么(或何时)我仍想使用旧的map在实际存在的系统上通过unordered_map?是否有任何我无法立即看到的明显情况? 最佳答案 作为alreadymentioned,map允许以排序的方式遍历元素,但unordered_map不允许。这在许多情况下都非常重要,例如显示集合(例如

c++ - 为什么有人会使用 set 而不是 unordered_set?

C++0x正在引入unordered_set,它可以在boost和许多其他地方使用。我的理解是unordered_set是具有O(1)查找复杂度的哈希表。另一方面,set只不过是一棵具有log(n)查找复杂度的树。为什么会有人使用set而不是unordered_set?即是否需要set了? 最佳答案 无序集必须通过以下几种方式为其O(1)平均访问时间付费:set比unordered_set使用更少的内存存储相同数量的元素。对于少量元素,在set中查找可能比unordered_set中的查找更快.尽管unordered_set的平均情

c++ - 在 C++ std::unordered_map 中预分配桶

我正在使用来自gnu++0x的std::unordered_map来存储大量数据。我想为大量元素预先分配空间,因为我可以限制使用的总空间。我想做的是打电话:std::unordered_mapm;m.resize(pow(2,x));其中x是已知的。std::unordered_map不支持这个。如果可能,我宁愿使用std::unordered_map,因为它最终会成为标准的一部分。其他一些限制:需要可靠的O(1)访问和map变异。所需的散列和比较函数已经是非标准的并且有些昂贵。O(logn)突变(与std::map一样)太昂贵了。->昂贵的哈希和比较也使得基于摊销的增长方式过于昂贵。

c++ - 在 C++ std::unordered_map 中预分配桶

我正在使用来自gnu++0x的std::unordered_map来存储大量数据。我想为大量元素预先分配空间,因为我可以限制使用的总空间。我想做的是打电话:std::unordered_mapm;m.resize(pow(2,x));其中x是已知的。std::unordered_map不支持这个。如果可能,我宁愿使用std::unordered_map,因为它最终会成为标准的一部分。其他一些限制:需要可靠的O(1)访问和map变异。所需的散列和比较函数已经是非标准的并且有些昂贵。O(logn)突变(与std::map一样)太昂贵了。->昂贵的哈希和比较也使得基于摊销的增长方式过于昂贵。

c++ - unordered_map/unordered_set 中元组的通用哈希

为什么不std::unordered_map,string>只是开箱即用?必须为tuple定义散列函数很繁琐。,例如templatestructdo_hash>{size_toperator()(std::tupleconst&tt)const{...}};Buildinganunorderedmapwithtuplesaskeys(MatthieuM.)展示了如何为boost::tuple自动执行此操作.有没有在不使用可变参数模板的情况下对c++0x元组执行此操作?这当然应该在标准中:( 最佳答案 这适用于gcc4.5,允许所有包

c++ - unordered_map/unordered_set 中元组的通用哈希

为什么不std::unordered_map,string>只是开箱即用?必须为tuple定义散列函数很繁琐。,例如templatestructdo_hash>{size_toperator()(std::tupleconst&tt)const{...}};Buildinganunorderedmapwithtuplesaskeys(MatthieuM.)展示了如何为boost::tuple自动执行此操作.有没有在不使用可变参数模板的情况下对c++0x元组执行此操作?这当然应该在标准中:( 最佳答案 这适用于gcc4.5,允许所有包

c++ - std::unordered_map::find 使用不同于 Key 类型的类型?

我有一个unordered_map使用字符串类型作为键:std::unordered_mapmap;一个std::hash为string提供特化,以及ASA适合operator==.现在我还有一个“字符串View”类,它是一个指向现有字符串的弱指针,避免了堆分配:classstring_view{string*data;size_tbegin,len;//...};现在我希望能够使用string_view来检查map中是否存在键。目的。不幸的是,std::unordered_map::find需要Key参数,不是通用的T论据。(当然,我可以将一个“提升”为string,但这会导致我想避