草庐IT

Unordered

全部标签

c++ - 比较 unordered_map 与 unordered_set

首先,它们之间的主要区别是什么?我唯一发现的是unordered_set没有运算符[]。我应该如何访问unordered_set中的元素,因为没有[]?哪个容器使用随机访问内存(或两者)?哪一个在任何意义上都更快或使用更少的内存? 最佳答案 它们几乎完全相同。unordered_set只包含键,没有值。没有从键到值的映射,因此不需要operator[]。unordered_map将键映射到值。您可以使用unordered_set中的各种find方法来定位事物。 关于c++-比较unord

c++ - unordered_map - 哈希函数无效

为什么下面的散列函数(返回常量0)似乎没有任何作用?由于哈希函数返回常量,我期望输出所有值都是3。但是,它似乎唯一地将std::vector值映射到唯一值,无论我哈希函数是常量。#include#include#include#include//Hashreturningalwayszero.classTVectorHash{public:std::size_toperator()(conststd::vector&p)const{return0;}};intmain(){std::unordered_map,int,TVectorHash>table;std::vectorvalue

c++ - 给 unordered_map 赋值的基本问题

我有一个unordered_map,它将int作为键存储,将指针作为值存储。我需要检查key是否存在。如果键不可用,我需要插入键和值。哪种方法更好?谢谢。unordered_maptestMap;classA*ptr=testMap[1];if(ptr==NULL)testMap[1]=newclassA;ORunordered_map::iteratorit=testMap.find(1);if(it==testMap.end()){testMap.insert(make_pair(1,newclassA));} 最佳答案 这两种

c++ - std::unordered_map 指针/引用失效

我有以下代码:std::unordered_mapmap;map["k1"]="v1";auto&v1=map["k1"];map["k2"]="v2";看完http://en.cppreference.com/w/cpp/container/unordered_mapNotesTheswapfunctionsdonotinvalidateanyoftheiteratorsinsidethecontainer,buttheydoinvalidatetheiteratormarkingtheendoftheswapregion.Referencesandpointerstoeitherk

【C++】哈希表封装unordered系列

 文章目录前言一、哈希表的封装总结前言在看本篇文章前大家尽量拿出上一篇文章的代码跟着一步步实现,否则很容易引出大量模板错误而无法解决。一、哈希表的封装首先我们要解决映射的问题,我们目前的代码只能映射整形,那么如何支撑浮点数等的映射呢?只需要多加一个模板参数就可以了:template structHashNode { HashNode*_next; pair_kv; HashNode(constpair&kv) :_kv(kv) ,_next(nullptr) { } }; template structHashFunc { size_toperator()(constK&k

c++ - SIGFPE 访问 unordered_map 时

我有一个unordered_map其中Block是一个简单的结构,定义如下:structBlock{size_tstart;size_tend;booloperator==(constBlock&b)const{returnstart==b.start&&end==b.end;}};namespacestd{templatestructhash{size_toperator()(constBlock&b)const{returnb.start;}};}当尝试访问map时,我确实在gdb中收到以下错误消息(g++4.7.1和clang++3.1都相同):Programreceivedsi

c++ - std::unordered_map::emplace 问题与私有(private)/删除的复制构造函数

以下代码可以在gcc4.7.2(mingw)中正常编译#include#includestructtest{test()=default;private:test(testconst&)=delete;};intmain(){std::unordered_mapmap;map.emplace(std::piecewise_construct,std::forward_as_tuple('a'),std::forward_as_tuple());}如果我将test中的复制构造函数从test(testconst&)=delete;更改为test(testconst&)=default;但是

c# 到 c++ 字典到 unordered_map 结果

我现在已经使用了几年的C#,我正在尝试学习一些新东西。所以我决定看看C++,以不同的方式了解编程。我一直在做大量的阅读,但我今天才开始写一些代码。在我的Windows7/64位机器上,运行VS2010,我创建了两个项目:1)一个c#项目,可以让我按照习惯的方式编写内容。2)一个让我玩的c++“makefile”项目,试图实现同样的事情。据我了解,这不是.NET项目。我开始尝试用10K值填充字典。出于某种原因,C++慢了几个数量级。这是下面的c#。请注意,我在时间测量之后放入了一个函数,以确保它没有被编译器“优化”掉:varfreq=System.Diagnostics.Stopwatc

c++ - O(1) 中 unordered_set 中的随机元素

我见过有人提到可以在O(1)时间内从unordered_set中获取随机元素。我试图这样做:std::unordered_settest_set;//fillwithdatasize_tindex=rand()%test_set.size();constTestObject*test=*(test_set.begin()+index);但是,unordered_set迭代器不支持带有整数的+。begin可以指定一个size_t参数,但它是桶的索引而不是元素。随机挑选一个桶然后随机挑选其中的一个元素会导致非常不平衡的随机分布。适当的O(1)随机访问的秘诀是什么?如果重要的话,这是在VC+

c++ - unordered_map 在实践中真的比 map 快吗?

当然,unordered_map的查找性能平均是恒定的,而map的查找性能是O(logN)。当然,为了在unordered_map中找到一个对象,我们必须:散列我们想要找到的key。equality_将key与同一存储桶中的每个key进行比较。而在map中,我们只需要将查找到的键与log2(N)个键进行less_than比较,其中N是map中的项目数。我想知道真正的性能差异是什么,因为散列函数会增加开销并且equality_compare并不比less_than比较便宜。我没有用自己可以回答的问题来打扰社区,而是编写了一个测试。我已经在下面分享了结果,以防其他人觉得这有趣或有用。如果有