草庐IT

unordered_container

全部标签

c++ - 接受 STL_container_type<string>::iterator 的模板化参数

我有一个函数,其中有一个包含字符串的容器(例如vector、set、list),并且给定一个开始迭代器和一个结束迭代器,通过迭代器范围处理字符串。目前函数声明如下:templatevoidProcessStrings(ContainerIterbegin,ContainerIterend);现在这将接受任何符合实现operator*的隐式接口(interface)的类型,前缀operator++以及函数体中的任何其他调用。我真正想做的是像下面这样明确限制输入量的定义(伪代码警告):template::iterator>voidProcessStrings(Container::iter

c++ - 遍历 C++ unordered_map 的时间复杂度

这个问题在这里已经有了答案:C++std::unordered_mapcomplexity(3个答案)关闭8年前。我知道C++STL中的unordered_map是作为哈希表实现的,哈希表由与哈希值对应的桶组成。插入,删除和元素搜索的时间保证摊销常数。但是我不太明白迭代器是如何处理这个数据结构的。当我递增迭代器时,它如何知道下一个位置在哪里?当我使用迭代器遍历unordered_map时,时间复杂度是多少?用于查找迭代器下一个位置的时间是常量吗?我在TheC++StandardLibrary:AtutorialandReference一书中找到了一些关于unordered_map内部结

c++ - 如何在 std::unordered_map<std::wstring, T> 中通过 std::wstring_view 类型的键查找?

我有std::unordered_map>map;当我尝试map.find("asdf"sv)我明白了errorC2664:'std::_List_const_iterator>>std::_Hash>,std::_Uhash_compare,_Alloc,false>>::find(conststd::basic_string,std::allocator>&)const':cannotconvertargument1from'std::wstring_view'to'conststd::basic_string,std::allocator>&'是否可以使用std::wstring

C++ 关于 boost::unordered_map & boost::hash 的一些问题

我最近才开始深入研究boost及其容器,我在网络和stackoverflow上阅读了几篇文章,发现boost::unordered_map是大集合中性能最快的容器。所以,我有这个类状态,它在容器中必须是唯一的(没有重复)并且容器中将有数百万甚至数十亿个状态。因此,我一直在尝试针对小尺寸和尽可能少的计算对其进行优化。我之前使用的是boost::ptr_vector,但正如我在stackoverflow上读到的那样,只要其中没有那么多对象,vector就是好的。在我的例子中,状态描述了来自机器人的感觉运动信息,因此可能有大量的状态,因此快速查找是重中之重。关注boostdocumentat

c++ - unordered_set<reference_wrapper<Ty>> 有效吗?

这是有效的C++(考虑到最新标准)吗?我在Ubuntu12.04上遇到了near-top-of-treeclang/libc++的编译错误。如果它应该是有效的,我会邮寄带有错误消息等的clang-dev列表。#include#includestructX{inti;};voidf(){std::unordered_set>setOfReferencesToX;//DostuffwithsetOfReferencesToX}**顺便说一句,我厌倦了限定问题/答案是特定于最新标准的。C++社区作为一个整体,是否可以开始限定特定于旧标准的内容?较新的标准已经发布了大约一年。

c++ - 在初始化列表中初始化 unordered_map

我正试图找到一个可能非常微不足道的问题的解决方案。我想在类初始化列表中初始化我的constunordered_map。但是我还没有找到编译器(GCC6.2.0)将接受的语法。代码链接是here.#includeclasstest{public:test():map_({23,1345},{43,-8745}){}private:conststd::unordered_mapmap_;};错误:main.cpp:Inconstructor'test::test()':main.cpp:6:36:error:nomatchingfunctionforcallto'std::unordere

c++ - unordered_map 中的双向迭代器?

以下最小示例:#include#includeintmain(){boost::unordered_mapm;boost::unordered_map::const_iteratori;m.insert(std::make_pair(1,2));i=m.end();--i;std::coutfirst"second...编译失败。bidi.cxx:Infunction‘intmain()’:bidi.cxx:13:error:nomatchfor‘operator--’in‘--i’根据Boost'sowndocumentation:iterator,const_iteratorare

c++ - 反转或反向迭代 unordered_map

我试图以相反的顺序打印unordered_map的内容,但是它没有rbegin或rend,所以你不能使用reverse_iterator。应该如何反转unordered_map?编辑(来自评论):我希望键按照插入的顺序排列,因此我不能使用map。键似乎保持插入顺序,但我需要将它们颠倒过来。 最佳答案 只需阅读问题中的第一句话即可得出答案:I'mtryingtoprintthecontentsofanunordered_mapinreverseorder您不能按任何顺序打印,因为它是无序的。在无序结构中谈论秩序是没有意义的。unord

c++ - 有效地将 std::unordered_set 的内容移动到 std::vector

在我的代码中,我有一个std::unordered_set,我需要将数据移动到一个std::vector中。我在获取数据时使用std::unordered_set以确保在转换为std::vector之前仅存储唯一值。我的问题是如何最有效地将内容移动到std::vector?移动数据后,我不需要std::unordered_set。我目前有以下内容:std::copy(set.begin(),set.end(),std::back_inserter(vector)); 最佳答案 在C++17之前,你能做的最好的事情是:vector.i

c++ - 自定义类的 unordered_set 是否有默认的哈希函数?

我正在使用std::unordered_set第一次对哈希函数有疑问。据我了解,如果您不指定哈希函数,它将默认为std::hash.我有一个mySet我的一个类(class)的成员:typedefstd::unordered_setUSetType;USetTypemySet;当我尝试构建时,出现以下错误:errorC2440:'typecast':cannotconvertfrom'constMyClass'to'size_t'如果要使用size_t,是否需要定义一个转换函数(到unordered_set)使用自定义类?有什么方法可以避免编写自己的哈希函数而只使用默认值吗?