草庐IT

unordered_container

全部标签

c++ - 我不明白 std::tr1::unordered_map

我需要一个关联容器,它可以让我通过字符串索引某个对象,但它也保持插入顺序,这样我就可以通过名称查找特定对象,或者只是迭代它并在同一个对象中检索对象我插入它们的顺序。我觉得这个hybridoflinkedlistandhashmap应该完成这项工作,但在我尝试使用std::tr1::unordered_map之前认为它以我描述的方式工作,但事实并非如此。那么有人可以向我解释unordered_map的含义和行为吗?@wesc:我确定std::map是由STL实现的,同时我确定std::hash_map不在STL中(我认为旧版本的VisualStudio将它放在名为stdext的命名空间中

c++ - 自引用使用 unordered_map 会导致 gcc 5.3 出现问题但不会导致 clang

以下代码无法在gcc5.3下编译(它是从较大代码段中提取的缩减版本):#include#includeclassFoo{std::unordered_mapm;//"self-referential"};intmain(){Foof;return0;}有以下错误:g++--std=c++1y-crh.cppInfileincludedfrom/usr/local/include/c++/5.3.0/utility:70:0,from/usr/local/include/c++/5.3.0/unordered_map:38,fromrh.cpp:1:/usr/local/include/

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

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

c++ - 结构作为 unordered_map 的键

我在使用结构作为键将数据放入unordered_map时遇到问题:typedefstructosdpi_flow_identificator{u32lower_ip;u32upper_ip;u16lower_port;u16upper_port;u8protocol;}osdpi_flow_identificator_t;//customhashfunctionforosdpi_flow_identificatorstructosdpi_flow_hash{std::size_toperator()(osdpi_flow_identificator*key)const{hashhash

c++ - boost::multi_index_container::index<Tag>::type 有什么意义?

如果你有一个boost::multi_index_container对于多个索引,显然有多种方法可以对其进行迭代——每个索引都定义了一种方法。例如,如果您有一个标签为T的索引,您可以从container.get().begin()迭代至container.get().end().如果您尝试在for循环中这样做(并且没有C++0xauto),迭代器的类型是multi_index_container::index::type::iterator.现在index::type将是boost::multi_index::detail::ordered_index或结构上等效的东西。例如。它将提供

c++ - 将 boost::unordered_set 作为结果映射传递给 boost::split

有谁知道将boost::unordered_set作为第一个参数传递给boost::split是否合理?在libboost1.42-dev下,这似乎会导致问题。这是导致问题的一个小示例程序,将其称为test-split.cc:#include#include#include#includeintmain(intargc,char**argv){boost::unordered_settags_set;boost::split(tags_set,"a^b^c^",boost::is_any_of(std::string(1,'^')));return0;}然后,如果我运行以下命令:g++

c++ - 使用 unordered_map 而不是 map 时出现链接器错误?

这是一个很奇怪的问题。我有两个类:一个自定义控制台类(CConsole)和一个测试类(CHashTableTest),我制作它们是为了玩弄map和unordered_maps以了解它们的工作原理。在我的控制台类中,我有一个CConsole的公共(public)静态成员变量,它向项目的其余部分公开一个静态控制台对象,这样我就可以在需要时写入此控制台。这适用于我所有的类,包括测试类,但仅当测试类使用map而不是unordered_map时!我收到的错误是:错误LNK2001:未解析的外部符号“publicstaticclassCConsoleCConsole:output”(?output

c++ - 为什么 C++11/Boost `unordered_map` 在删除时不重新散列?

我想知道为什么C++11和Boost的hashmap在通过迭代删除元素时不调整大小。即使这在技术上不是内存泄漏,我认为它可能是应用程序中的一个严重问题(这对我来说是一个隐藏的问题,很难追溯)并且它实际上可能会影响许多应用程序。这是容器的“设计缺陷”吗?我对它进行了基准测试,似乎影响了几个编译器版本(包括VS、Clang、GCC)重现问题的代码是:std::unordered_mapm;for(inti=0;isecond;it=m.erase(it);}我创建了一个self-containedtest使用自定义分配器跟踪内存使用情况的文件。据我所知,其背后的原因是允许通过迭代删除元素并

c++ - Boost Container vector 可以通过非原始指针管理内存吗?

我有一个类似指针的结构来代替指针。与指针的区别在于它有额外的信息,(也是特殊的)分配器可以使用这些信息来释放内存。这种类似于指针的结构适用于所有基本用途。我可以分配和取消分配内存、取消引用、递增、->等现在我想使用这个指针由类似STL的容器管理。早些时候,我意识到STLvector基本上无法处理非原始指针。T*编码太硬,标准基本上排除了任何不是指针的东西。灵感来自Boost.Interprocess'offset_ptr我决定使用Boost.Containervector,这是非常可定制的,原则上可以管理任何东西,分配器传递给boost::container::vector可以处理任何

c++ - unordered_multimap 在 gnu++11 和 c++0x 中的不同行为

我在不同的编译器上编译了以下程序,并得到了不同的行为,来源:#include#include#includeusingnamespacestd;std::unordered_mapmymap;std::unordered_multimapmymultimap;intmain(){DoAddItem();std::coutfirstsecond;std::coutfirstsecond;std::coutmypair[100];intidx;std::strings1;std::strings2;for(idx=0;idx在RedHatLinux中用g++4.4.6编译如下:g++--s