jjzjj

Unordered

全部标签

c++ - std::unordered_map vector 下标超出范围

我正在使用std::unordered_map保存一些值,并且在添加新值时出现“vector下标超出范围”。我正在使用VisualStudio2012,错误跟踪是:std::vector>>>,std::_Wrap_alloc>>>>>>::operator[](unsignedint_Pos)Line1140C++std::_Hash,std::equal_to>,std::allocator>,0>>::_Vec_lo(unsignedint_Bucket)Line907C++std::_Hash,std::equal_to>,std::allocator>,0>>::_End(u

C++ 如何将数组作为键插入到 unordered_map 中?

您好,我曾经有一个unordered_set来保存我的16int数组,现在我需要再存储一个int作为它的桶。我想知道我是否可以将数组插入到我的unordered_set中,或者我可以使用我以前使用的相同模板吗?#include#includenamespacestd{templatestructhash>{typedefarrayargument_type;typedefsize_tresult_type;result_typeoperator()(constargument_type&a)const{hashhasher;result_typeh=0;for(result_typei

c++ - 关于 std::unordered_multimap 中键唯一性的保证

我想知道std::unordered_multimap中关键对象的唯一性在处理迭代时。我将尝试解释这一点:我需要将一些数据与map中的键类型相关联,这些数据不应在Hash中考虑。或KeyEqual元素,但我需要它来避免与其存储单独的map(出于优化目的)。所以与我的想法相关的代码如下:structKey{void*data;mutableboolattribute;Key(void*data):data(data),attribute(false){}booloperator==(constKey&other)const{returndata==other.data;}};struct

c++ unordered_map 如果预先知道最大大小,是否有办法为元素预分配内存

看起来reserve/rehash函数只预分配桶的数量,而不是要插入的元素(key,vlaue)对的内存。有没有办法我们也可以为元素预分配内存,这样低延迟的应用程序就不需要在动态内存分配上浪费时间。 最佳答案 一种可能性是编写您自己的分配器。如果您至少清楚表中可能有多少项目(这样您就可以为所有项目预分配空间)并且不关心项目的重复使用空间,那么这会特别有效它们已从表中删除(因此您的簿记很简单)。在这种情况下,您基本上可以为N个对象预先分配空间,并简单地跟踪下一个要分配的项目的位置。分配对象包括简单地返回地址和递增指针,如return*

c++ - std::unordered_(set|map) 基于范围的删除的真实用例是什么?

发现std::unordered_set和std::unordered_map具有基于范围的erase(first,last)这在我看来是另一种射自己腿的好方法。也许有人知道此类功能的实际用例?或者这可能被认为是糟糕的设计? 最佳答案 我认为是为了提供与常规map和set的兼容性。但原则上我还是觉得有用。如果某个范围的值已停用,您希望将它们从集合中移除。但是正常的用例是查找(比插入/删除常见一百万倍)并且不遍历,所以无序版本很好。它怎么能射你?这与循环删除每个没有什么不同。啊,简单的开始,结束范围正向遍历是行不通的,所以你认为提供的

c++ - 是什么导致 clang 找不到 unordered_map header ?

我正在尝试使用Clang++编译我在网上找到的程序。Makefile生成此命令:clang++-c-archx86_64-msse3-std=c++11-stdlib=libstdc++-Wno-missing-field-initializers-Wno-missing-prototypes-Wreturn-type-Wno-non-virtual-dtor-Wno-exit-time-destructors-Wformat-Wmissing-braces-Wparentheses-Wno-switch-Wunused-function-Wunused-label-Wno-unuse

c++ - 恒定大小字符串的高效 HashMap

我需要将仅包含字母数字值(A-Z、0-9,无小写字母)的固定大小的字符串映射到其他字符串。unordered_map变得非常大(数千万个键),而映射值来自一组几千个字符串。在进行性能分析时,我发现大部分时间都花在了将新值插入map(operator[])上,而且清除map也需要很长时间。std::unordered_maphashMap;while(...){...hashMap[key]=value;//~50%ofprogramtimeisspenthere...}hashMap.clear();//Takesaverylongtime,atthispointhashMap.siz

c++ - 避免在 std::map/std::unordered_map 中使用 std::string 键查找临时对象

这个问题在这里已经有了答案:Avoidingkeyconstructionforstd::map::find()(4个答案)关闭8年前。考虑以下代码:std::mapm1;autoi=m1.find("foo");constchar*key=...autoj=m1.find(key);这将为每次map查找创建一个临时的std::string对象。避免它的规范方法是什么?

c++ - unordered_set::remove_if(): C3892: 无法分配给常量变量

我有这样的代码:unordered_setoutput;...autorequiredType=variables.at(arg.value);autoend=remove_if(output.begin(),output.end(),[&](AttrValuex){return!matchingOutputType(requiredType,ast->getNodeType(ast->getNodeKeyAttribute(x)));});//queryevaluator_getcandidatelist.cpp(179)output.erase(end);错误在代码的第4行。所以我

c++ - 如何判断两个 LARGE unordered_map 是否相等?

给定两个大的unordered_map,比如map_a,map_b。如何有效判断map_a和map_b的信息相同?例如,如果map_a是{'a':3,'b':2}并且map_b是{'a':3,'b':2}那么他们是一样的。也就是说,对于map_a中的每个键k,map_a[k]=map_b[k]。我的问题是如何有效地决定这个问题。我知道最糟糕的时间是O(max{map_a.size(),map_b.size()})。但是有一些观察可以快速确定map_a不等同于map_b。例如,map_a.size()!=map_b.size()。还有其他观察结果吗?我们可以使用bucket_count(