草庐IT

map_coordinates

全部标签

c++ - std::map 中的 std::string 导致 Valgrind 内存泄漏

这是Valgrind的输出:==6519==at0x4C25885:operatornew(unsignedlong)(vg_replace_malloc.c:319)==6519==by0x4EE65D8:std::string::_Rep::_S_create(unsignedlong,unsignedlong,std::allocatorconst&)(new_allocator.h:104)==6519==by0x4EE7CE0:char*std::string::_S_construct(charconst*,charconst*,std::allocatorconst&,s

c++ - 如何从 map 中的集合中删除元素?

我无法从set中删除元素在map内称为accesrightsByRank.map的键不同ACCESRIGHT小号:owner,modify,read和none.map的值是sets带有某些访问器的名称ACCESRIGHTmap>::const_iteratori;set::const_iteratorj;for(i=this->accessrightsByRank.begin();i!=this->accessrightsByRank.end();i++){for(j=(*i).second.begin();j!=(*i).second.end();j++){if((*j).compa

c++ - 在 C++11 中从 C++17 重新实现 std::map::try_emplace()?

std::map::try_emplace()看起来非常方便和高效,但它仅在C++17中可用。是否可以在C++11中重新实现它?templatepairtry_emplace(constkey_type&k,Args&&...args); 最佳答案 对于有序映射,您可以使用lower_bound接近行为:templatestd::pairtry_emplace_m(M&m,consttypenameM::key_type&k,Args&&...args){autoit=m.lower_bound(k);if(it==m.end()|

c++ - std::map emplace 因显式构造函数而失败

classA{public:explicitA(intx){}};vectorv;v.push_back(1);//compilererrorsincenoimplicitconstructorv.emplace_back(1);//callsexplicitconstructor以上来自video大卫·斯通。我不明白的是为什么emplace_back调用显式构造函数?我在C++标准中看不到任何内容使这合法。只有在听了DavidStone的youtube视频后,我发现了这件事。现在,我对std::map进行同样的尝试。mapm;m.insert(pair(1,2));//compile

c++ - ->first/second 到一个空的 map 迭代器开始

我不明白这段代码中发生了什么。映射引用声明“如果容器为空,则返回的迭代器值不应被取消引用。”但是some_map->begin()->second呢?在一张空map上。我认为它是无效的,但这段代码打印出“0”。谁能解释为什么?intmain(){mapa;printf("%d",a.begin()->second);return1;}谢谢! 最佳答案 来自thisstd::map::beginreferenceIfthecontainerisempty,thereturnediteratorwillbeequaltoend()然后查

c++ - 来自 Voronoi 的 Delaunay boost : missing triangle with non-integral point coordinates

遵循这两个资源:BoostbasictutorialSOQuestion我用boost写了一个Delaunay三角剖分。如果点坐标是完整的(我生成了几个随机测试并且我没有观察到错误),它工作正常。但是,如果这些点不是整数,我会发现许多不正确的三角剖分缺少边缘或错误的边缘。例如这张图片是用四舍五入的值构建的并且是正确的(见下面的代码)但是这个图像是用原始值构建的并且是不正确的(见下面的代码)这段代码重现了这两个例子(没有显示)。#includeusingboost::polygon::voronoi_builder;usingboost::polygon::voronoi_diagram

c++ - 用小于迭代器之间的比较遍历 std::map

当我想在C++中遍历一个map时,我们可以使用以下技术:for(autoi=m.begin();i!=m.end();i++){......}为什么我们不能用下面的代替:for(autoi=m.begin();i我的猜测是因为关联容器中的元素不像顺序容器那样按顺序存储,对吗? 最佳答案 比较运算符需要randomaccessiterators.map只提供双向迭代器。原因是如果另一个迭代器在恒定时间内之前或之后,您不能只用这样的迭代器来判断(是的,它们在内存中不是一个接一个)。作为!=对所有类型的迭代器都有效,用它代替版本。如果您更

c++ - 如何优化在频繁调用的函数中将大型 std::unordered_map 重用为临时函数?

用一个工作示例简化了问题:我想多次重用std::unordered_map(我们称它为umap),类似于以下虚拟代码(它没有做任何有意义的事情)。我怎样才能使这段代码运行得更快?#include#include#includeunsignedsize=1000000;voidfoo(){std::unordered_mapumap;umap.reserve(size);for(inti=0;i在我的原始代码中,我想在umap中存储矩阵条目。每次调用foo时,键值从0到N开始,每次调用foo时N可以不同,但​​索引有10M的上限。此外,值可以不同(与此处始终为i*0.1的虚拟代码相反)。

c++ - 可以 std::map 键地址值的数量吗?

这可能是一个有点愚蠢的问题,但假设std::map定义如下:std::mapm;有没有什么方法可以存储多个值并可以通过一个键访问?提问的动机:std::map有像count()和equal_range()这样的方法,它们获取一个键作为参数,这样可以给出一个感觉一个键可以指定多个值。 最佳答案 这些方法的存在是为了为其他关联容器提供一个通用接口(interface),这些关联容器确实允许每个键有多个值(例如std::multimap,这正是您正在寻找的)。这使得通用算法(即使用模板)的实现比其他方式容易得多,并且以这种方式设计不会丢失

c++ - 仅使用键作为比较器将两个 map 相交

我有两个map,我想得到两个map的交集,只使用键作为比较器,同时对+/-等常见元素的值进行简单的数学运算例如:mapm1,m2;m1[1]=1.1;m1[2]=2.2m2[2]=0.1;m2[4]=3.3;如果我使用减法运算符,在交集后我将得到m3,它有对:(2,2.1)。使用算法库的有效方法是什么?谢谢。 最佳答案 我们要在这个函数中执行什么操作?遍历map合并具有相同键的值向map添加元素那我们就要考虑除了std::map还有哪些容器适合这个模型。您是否要包含多映射并将所有元素与相同的键组合(假设不是)?不必对map进行排序,