草庐IT

Union_map

全部标签

c++ - 具有固定插入次数的 Map 的内存分配

我想将n个元素插入到一个映射中,其中n是提前已知的。我不想在每次插入时分配内存。我想要一开始就分配所有内存。有没有办法做到这一点?如果是这样,如何?编写某种内存分配器会有帮助吗?我运行了GMan的代码并得到了以下输出。GetMem从对“new”的调用中打印出来,而FreeMem从对delete的调用中打印出来。size是请求的字节数,ptr是返回的指针。显然,分配/释放是在插入期间进行的。你怎么解释这个?GetMem大小40,指针0x8420008GetMem大小40,指针0x8420038GetMem大小120,指针0x8420068GetMem大小120,指针0x84200e8Fr

c++ - 为什么全局匿名 union 需要声明为静态的?

C++0xdraft9.5.6Anonymousunionsdeclaredinanamednamespaceorintheglobalnamespaceshallbedeclaredstatic.这是为什么? 最佳答案 假设匿名union不需要声明为静态的,并且编译器遇到这两个翻译单元(预处理后):文件1:union{inta;charb;};//Furthercontentsreferringtoaandb文件2:union{inta;charb;};//Further(different)contentsreferringto

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++ - 如何判断两个 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(

c++ - 如何访问第二个 map 迭代器?

我们是两个学生,我们现在有一个我们无法解决的史诗般的大问题。我们向老师求助,但他帮不了我们,所以我们最后的机会就是这个论坛!我们正在做一个项目:NPI文件的命令解释器。map::iteratortrouve=interpreteur.myMap.find(saisie);if(trouve==interpreteur.myMap.end())cerr*second)();我们必须使用名为“map”的对象,但我们无法获取第二个参数,名为..“Second”。为什么?代码块告诉我们错误在“else”中,这是错误:'second'wasnotdeclaredinthisscope.我们也试过

c++ - std::map 在低内存情况下导致 "stack overflow"

此应用程序正在使用C++在WindowsXP上的VS2010中开发。当计算机在物理内存上运行时非常低(并且页面文件被禁用,因为它是我们的测试用例),这行代码:std::map>MyMap;在malloc.c中导致“堆栈溢出”错误'returnHeapAlloc(_crtheap,0,size?size:1);'MyApp.exe中0x7c90e8e5处的未处理异常:0xC00000FD:堆栈溢出。此调用是从应用程序的线程之一进行的。如果内存不足是错误,它应该抛出bad_alloc谁能告诉我这里可能是什么原因。编辑:这是实际堆栈的样子ntdll.dll!7c90e8e5()[Frames

c++ - std::map 用于小型稀疏集合

给定一个结构MyData,其中存在许多实例(我会说最多数百万),对于每个实例,我需要存储一个成员,该成员可能包含最多8个键的值。key将始终是int范围0-7,并且值将始终是float的3D点(我们称之为Point3)。它最多包含:Key|Value-------------0|[x,y,z]1|[x,y,z]2|[x,y,z]3|[x,y,z]4|[x,y,z]5|[x,y,z]6|[x,y,z]7|[x,y,z]但是,在99.9%的情况下,它将包含0或1个键值对,例如:Key|Value-------------1|[x,y,z]如何有效地确定存储空值或单值std::map的内存开

c++ - C2280 : attempting to reference a deleted function (union, 结构体,复制构造函数)

当我尝试在VisualStudio2015中编译以下最小示例时,我遇到了误导性错误消息的问题:classVector{floatx;floaty;public:Vector(floatx,floaty):x(x),y(y){}Vector&operator=(constVector&v){x=v.x;y=v.y;return*this;}//Vector(Vector&&)=default;};classRect{public:union{struct{Vectorp1,p2;};struct{floatp1x,p1y,p2x,p2y;};};Rect():p1(0,0),p2(0,0

c++ - 为什么 std::map find() 没有声明为 noexcept?

C++14标准定义std::map的find()成员函数如下:iteratorfind(constkey_type&x);const_iteratorfind(constkey_type&x)const;为什么这些函数没有定义为noexcept?内部可能出现什么问题,这将需要抛出异常或产生未定义的行为(除了找不到元素,在这种情况下函数返回end迭代器并且无论如何都不需要抛出异常)? 最佳答案 find()基于map的Compare()方法,这可能会引发异常(想象一下复杂键可能不正确的情况).因此,我们不能确定find()不会引发异常

c++ - 在 union 成员初始化器列表中初始化多个重叠字段是否合法?

我有这个联盟:unionFoo{uint32_tu32;struct{uint32_ta:10;uint32_tb:10;uint32_tc:10;uint32_td:2;};Foo():a(0),b(1),c(2),d(3){}};我们有一个分析C++代码潜在错误的工具,它有一个误报,它认为在我写这篇文章时u32还没有被初始化。我发现VC++会让我写这个成员初始化列表:Foo():u32(0),a(0),b(1),c(2),d(3)它确实关闭了该工具,但它看起来……非常可疑。(根据评论编辑:GCC和Clang不会接受它,所以非常可疑似乎是有道理的。)对于结构,成员初始值设定项按其在结