std::unordered_map < K, boost::ptr_deque < T >'s operator[] (K const &)和emplace之间的区别
#include #include #include #include #include struct T { T() = default; T(T const &) = delete; T & operator = (T const &) = delete; T(T &&) = default; T & operator = (T &&) = default; }; using S = boost::ptr_deque ; int main() { std::unordered_map testum; // testum.emplace(1u, S()); // testum.insert(std::make_pa
4 2024-04-02
编程技术问答社区
如何使用boost::unordered_map
对于我的应用程序,我需要使用哈希地图,因此我编写了一个测试程序,其中我将基本镜的一些实例存储在boost :: unordered_map中.但是我想通过调用特殊功能来达到这些实例,该功能返回基本的派生类,我将这些函数的参数用于unordered_map的哈希键.如果找不到具有某些参数的类,则会生成类并存储在地图中.该程序的目的可能不清楚,但这里是代码. #include #include using namespace std; using namespace boost; typedef unsigned char BYT; typedef unsigned long long ULL; class BaseClass { public: int sign; size_t HASHCODE; BaseClass(){} }; class ClassA : public Ba
6 2024-04-02
编程技术问答社区
避免使用临时的std::string来调用boost::unordered_map::find
我有以下类型: boost::unordered_map objectContainer; 使用std::strings作为密钥,它只是某些域对象的映射.现在,std::string可以与const char*进行比较. (尽管可能正在发生隐式转换,但不需要明确的std::string临时?) 当我尝试做 之类的事情时,问题就会发生 void findStuff(const char* key) { auto it = objectContainer.find(key); //
10 2024-04-02
编程技术问答社区
如何在无序地图上使用BOOST_FOREACH?
好吧,这是我的情况 - 非常简单,但我不确定它如何工作(我找不到任何文档...): 我有一个Unordered_map: typedef unsigned long long U64; typedef boost::unordered_map HASH; 我想循环遍历元素(主要是密钥),就像使用php foreach,但是这次使用BOOST_FOREACH,我怀疑类似: HASH myMap; // .. assignment, etc... BOOST_FOREACH (U64 key, myMap) { // do sth with the Key-Value pair U64 val = myMap[key]; } 有什么想法? 解决方案 Unordered_map中的每个条目都是一对,因此,当您与BOOST_FOREACH联合使用地图时,您会像这样迭代那对: BOOST_FOREACH( HAS
4 2024-04-02
编程技术问答社区
如何使用boost::unordered_map
对于我的应用程序,我需要使用哈希地图,因此我编写了一个测试程序,其中我将基本镜的一些实例存储在boost :: unordered_map中.但是我想通过调用特殊功能来达到这些实例,该功能返回基本的派生类,我将这些函数的参数用于unordered_map的哈希键.如果找不到具有某些参数的类,则会生成类并存储在地图中.该程序的目的可能不清楚,但这里是代码. #include #include using namespace std; using namespace boost; typedef unsigned char BYT; typedef unsigned long long ULL; class BaseClass { public: int sign; size_t HASHCODE; BaseClass(){} }; class ClassA : public Ba
4 2024-04-02
编程技术问答社区
如何在boost::unordered_map中使用自定义类型的键?
我现在正在使用Boost在项目中的哈希地图实现,并且我正在尝试实现键的自定义类型.我有四个未签名的整数,我想将其合并到一个128位数据类型中以用作键. 我创建了一个带有四个元素的32位整数数组的结构,该元素是我的存储空间.老实说,我不确定Boost的Hash Map如何工作,所以我不确定自己在这里做什么,但是我遵循了Boost文档( http://wwwwww.boost.org/doc/doc/libs/libs/1_37_0/1_37_0/doc/doc/doc/html/html/hash/hash/hhash/hhash/custom.html )用于扩展boost :: hash,然后我创建了一个哈希功能以及自定义比较操作员. 我的标题中定义了此自定义类型.这是我的代码: #ifndef INT128_H_ #define INT128_H_ // Custom 128-bit datatype used to store and compare the r
8 2024-04-02
编程技术问答社区
如何在boost::unordered_map中使用自定义类型的键?
我现在正在使用Boost在项目中的哈希地图实现,并且我正在尝试实现键的自定义类型.我有四个未签名的整数,我想将其合并到一个128位数据类型中以用作键. 我创建了一个带有四个元素的32位整数数组的结构,该元素是我的存储空间.老实说,我不确定Boost的Hash Map如何工作,所以我不确定自己在这里做什么,但是我遵循了Boost文档( http://wwwwww.boost.org/doc/doc/libs/libs/1_37_0/1_37_0/doc/doc/doc/html/html/hash/hash/hhash/hhash/custom.html )用于扩展boost :: hash,然后我创建了一个哈希功能以及自定义比较操作员. 我的标题中定义了此自定义类型.这是我的代码: #ifndef INT128_H_ #define INT128_H_ // Custom 128-bit datatype used to store and compare the r
8 2024-04-02
编程技术问答社区
为什么C++11/Boost的`unordered_map`在擦除时不会重新洗牌?
我想知道为什么C ++ 11和Boost的Hashmap在通过迭代擦除元素时不会调整大小.即使从技术上讲这不是内存泄漏,我认为这在应用程序中可能是一个严重的问题(这对我来说是一个隐藏的问题,很难追踪它),并且实际上可能影响许多应用程序.这是带有容器的"设计缺陷"? i对其进行了基准测试,似乎正在影响多个编译器版本(包括VS,Clang,GCC) 复制该问题的代码是: std::unordered_map m; for (int i = 0; i second; it = m.erase(it); } 我创建了一个 self-content自
2 2024-04-02
编程技术问答社区
Boost多索引容器与基于std::unordered_map(map的映射)的多级映射容器的比较
我最近发现了BOOST :: MULTI_INDEX_CONTAINER,我对他的性能感到好奇,与我自己的基于多级映射的类似容器的实现相比,我的性能很好奇,并定义为: typedef int Data; typedef uint64_t MainKey; typedef uint64_t SecondaryKey; typedef std::unordered_map SecondaryMap; typedef std::unordered_map PrimaryMap; 关键排序并不重要.快速查找很重要,为此,我正在使用: // find primaryKey=10 and secondaryKey=30 PrimaryMap m; .... auto i1 = m.find( 10); if ( i1 != m.end()) { auto& se
2 2024-04-02
编程技术问答社区
Boost.Intrusive和unordered_map
我希望使用侵入性的unordered_map.由于某种原因,库中只有一个unordered_set.也有一个侵入性的散布,但我不确定它具有相同的功能性,也没有相同的接口. 我错了,我错过了unordered_map链接吗? 如果我不是一个教程可以帮助我实施一个教程? 解决方案 这是一个有趣的问题. boost.似乎没有提供任何订购或无序的地图接口.它具有许多实现类型,可以随着订购的地图(红色树木,AVL树,张开树)和无序(Hashtables)的地图而工作.但是没有地图,我无法告诉你为什么. 您看到了两种选择: 只使用hashtable:无序的容器被实现为Hashtables(唯一的原因是它们不称为 hash_map是避免使用该名称与预先存在的库的名称碰撞).如果您想完成工作,那将有效. 如果您真的想实现自己的实现,则要查看boost.intrusive的 unordered_set .我没有看过实现,但几乎可以肯定是围绕一种或多种树类型的包装器. std::s
8 2024-04-02
编程技术问答社区
建立一个以图元为键的无序地图
在带有Boost的C ++程序中,我正在尝试构建一张无序的地图,其键是双打的元素: typedef boost::tuples::tuple Edge; typedef boost::unordered_map EdgeMap; 初始化地图可以完成,但是,当我尝试用键和值填充 时 EdgeMap map; Edge key (0.0, 0.1, 1.1, 1.1); map[key] = 1; 我遇到以下错误消息: /usr/include/boost/functional/hash/extensions.hpp:176: error: no matching function for call to ‘hash_value(const boost::tuples::tuple
2 2024-04-02
编程技术问答社区
是否有一个BOOST池固定大小的分配器?
我想创建unordered_map(因为我特别想要一张哈希地图).我想在开始时分配其最大大小(根据我的约束). 因此,如果我想分配256个条目,每个条目的大小为1B(只是一个例子.假设1 Byte包括键和值).然后我的unordered_map键 +条目的总大小为256b.我想在分配器中预先分配256b. 然后,当unordered_map将调用allocate()/deallocate()时,allocator将从已经分配的内存中给出1B. typedef boost::unordered::unordered_map, std::equal_to, ??? > > myMap 它存在于增强中吗?还是其他地方? ----编辑---- 正如我所看到的(在这里的答案) - 我的问题有两种解决方案: 实现allocator,该allocator容纳boost::pool.此p
8 2024-04-02
编程技术问答社区
使用Boost unordered_map
我想在我的项目中包括boost::unordered_map,而无需下载整个Boost软件包.我该怎么做? 解决方案 使用bcp: . cd $BOOST_DIR bcp unordered_map /tmp/TEST 现在/tmp/test包含 仅 unordered_map> unordered_map(在我的情况下为15MB)(与完整的Boost库的734MB相对) 其他解决方案 您至少需要标头,因为辅助软件包相互取决于彼此.您可能只想选择所需的标头文件,但是脖子确实会很痛苦,并且会花很多时间.该算法是: 仅包括boost/unordered_map. 虽然预处理器抱怨找不到标头: 添加该标头. 重新编译. 您最终只会获得必要的标题.但是我看不到此解决方案的任何优势.
6 2024-04-02
编程技术问答社区
为什么std::map接受std::pair作为key,而std::unordered_map不接受?
在考虑重复之前,请了解我的问题的基础. 为什么C ++ std::map接受A std::pair作为关键类型,而A std::unordered_map则不接受? 第一种情况完美地编译: #include #include using namespace std; typedef pair int_pair; int main() { map m; return 0; } 第二种情况给出了大量的编译错误.从这个问题和#include #include using namespace std; typedef pair int_pair; int main() { unordered_map m; return 0; } 这里的问题不是如何为std::unorde
12 2024-03-30
编程技术问答社区
C++分拣算法
感谢您提前查看这个问题. 我正在尝试订购以下项目列表: Bpgvjdfj,Bvfbyfzc Zjmvxouu,Fsmotsaa Xocbwmnd,Fcdlnmhb Fsmotsaa,Zexyegma Bvfbyfzc,Qkignteu Uysmwjdb,Wzujllbk Fwhbryyz,Byoifnrp Klqljfrk,Bpgvjdfj Qkignteu,Wgqtalnh Wgqtalnh,Coyuhnbx Sgtgyldw,Fwhbryyz Coyuhnbx,Zjmvxouu Zvjxfwkx,Sgtgyldw Czeagvnj,Uysmwjdb Oljgjisa,Dffkuztu Zexyegma,Zvjxfwkx Fcdlnmhb,Klqljfrk Wzujllbk,Oljgjisa Byoifnrp,Czeagvnj 进入以下顺序: Bpgvjdfj Bvfbyfzc Qkignteu Wgqtalnh Coyuhnbx Zjmvxouu Fsmotsa
12 2024-01-23
编程技术问答社区
以更快的方式从/向文件读/写std::unordered_map
我正在使用一些非常大的std::unordered_map S(数亿个条目),需要保存和从文件中保存和加载它们.我目前这样做的方式是通过地图迭代并读取/编写每个密钥和价值对一对: std::unordered_map map; void save(){ std::unordered_map::iterator iter; FILE *f = fopen("map", "wb"); for(iter=map.begin(); iter!=map.end(); iter++){ fwrite(&(iter->first), 8, 1, f); fwrite(&(iter->second), 1, 1, f); } fclose(f); } void load(){ FILE *f =
8 2024-01-23
编程技术问答社区
为什么向量比unordered_map快?
我正在解决leetcode上的问题,但是还没有人能够解释我的问题. 问题就是这样: 给定一个任意赎金的笔记字符串和另一个包含所有杂志字母的字符串,写一个函数,如果可以从杂志构造赎金便条,该函数将返回true;否则,它将返回false. 杂志字符串中的每个字母只能在您的赎金注中使用一次. 注意: 您可以假设这两个字符串都只包含小写字母. canConstruct("a", "b") -> false canConstruct("aa", "ab") -> false canConstruct("aa", "aab") -> true 我的代码(需要32ms): class Solution { public: bool canConstruct(string ransomNote, string magazine) { if(ransomNote.size() > magazine.size()) return false;
10 2024-01-22
编程技术问答社区
二维unordered_map
typedef boost::unordered_map OneDimentionalNodes; typedef boost::unordered_map TwoDimentionalNodes; TwoDimentionalNodes nodes; 这是有效的吗? 我不使用任何哈希功能,因为unordered_maps的键是单个整数. 它编译了,但是当我这样迭代它时,它在尝试访问此 - > hash_function()(k); 时会崩溃 for (TwoDimentionalNodes::iterator it= nodes.begin(); it != nodes.end() ; ++it) { for(OneDimentionalNodes::iterator it2 = nodes[it->first].begin(); it2 != nodes[it->first].end()
22 2024-01-08
编程技术问答社区
在XCode中放入不同的编译单元时,静态unordered_map被擦除。
我在我的类别中有一个静态的unordered_map.如果将我的类定义和声明放在包含函数main的文件的不同文件中,则在行为上会差异. 问题是,我观察到,如果C类位于函数Main的同一编译单元中,一切都很好,我只会看到"创建新字符串:C"的文本.但是,如果我将代码拆分为三个文件(请参见下面的列表),我会看到"创建新字符串:C"两次,这意味着我的静态unordered_map在输入main 之前就对其进行了擦除.. 我的问题是:为什么会发生这种情况? (差异仅在使用Apple LLVM编译器4.1 的编译时发生. 预先感谢您的任何想法! // would go to My_header.h #include #include #include using namespace std; class C{ public: C(const string & s); private: sta
12 2023-12-20
编程技术问答社区
这个哈希值只适用于枚举类型
我正在为具有unordered_map成员的C ++的(非常)简单的类工作: class SDLFontManager : public CPObject, public FontManagerProtocol { public: SDLFontManager() {}; // flush the cache when the manager is destroyed virtual ~SDLFontManager() { flushFontCache(); }; // load a font from the cache if it exists, or load it from file and cache it. virtual FontProtocol* fontWithTTF(const char* filename) { if(_cache.find(filename) != _cache.end()) {
12 2023-12-19
编程技术问答社区