草庐IT

c++ - C++中的线程安全

我有如下关于线程安全的问题(我只有两个线程,其中一个线程只从映射中读取,其他线程将写入和读取,如图所示)://Thread2:thereadingandwritingthreadunordered_map*>testMap;//needlockbecausewritingtothemap?testMap[1]=newunordered_map;//donotneedlockbecauseonlyreadingandtheotherthreadisonlyreading?unordered_map*ptr=testMap[1];//needlockbecausewriting?(*ptr

c++ - 调用 std::map::clear 的段错误

几个月来我一直在与段错误作斗争,现在我来这里寻求帮助。当我调用以下函数时出现段错误voidfoo(...,std::map&x){if(!x.empty())x.clear();...}ClassA{private:map_N;public:voidf(...){foo(...,_N);...}};//inmainroutine,thefunctioniscalledinaloopAa;while(...){a.f(...);}使用gdb,我将错误定位到调用clear()函数的行,它显示“doublefreeorcorruption”错误,程序在调用c++/4.1.2/ext/new_

c++ - unordered_map 使用什么位散列函数?

C++0x的unordered_map默认使用什么位散列?std::hash函数返回size_t。这是否意味着unordered_map使用16位哈希函数? 最佳答案 std::unordered_set默认使用std::hash。如果std::size_t对你来说是16位的,那么我猜它确实使用了16位哈希。在16位机器上,我希望unordered_map::max_size()足够低以至于使用这样一个弱散列不会有问题。 关于c++-unordered_map使用什么位散列函数?,我们在

c++ - "std::map with mutexes"与 "libcds maps (Michael Hashmap and Split Order List)"并行插入、查找、删除之间是否有任何速度测试?

所以我真的很想看到一些并行的速度测试(比如从100到10000个并行线程),其中每个线程至少在3种类型的并发映射上插入、查找、删除-std::map(有一些互斥锁)与libcds(ConcurrentDataStructures)...例如,如果这样的比较尚不存在,请帮助我创建一个。直接相关:LibCds:MichaelHashmapandSplitOrderList假设我们有#include#include#includeclassTestDs{public:virtualboolcontainsKey(intkey)=0;virtualintget(intkey)=0;virtua

c++ - 如何使用非 STL 类型(例如来自 ICU 的 UnicodeString)创建 unordered_map?

我希望能够做到这一点:std::unordered_mapmymap;但是,当我这样做(并且开始使用它)时,我遇到了“无法将size_t转换为UnicodeString”的错误。所以我环顾四周,readuponunorderedcontainers.这篇博文指出我需要提供std::hash的特化,所以我就是这么做的:namespacestd{templateclasshash{public:size_toperator()(consticu::UnicodeString&s)const{return(size_t)s.hashCode();}};};虽然不完美,但满足要求。但是,现在我

c++ - 将 unique_ptr 插入 map ,指针被销毁

我有以下(简化的)类(class):classOperator{private:std::map>op;public:templatevoidinsertOperand(std::stringconst&s,To=T()){op.insert(std::pair>(s,std::move(std::unique_ptr(newT(o))));}voidsetOperandsValue(std::stringconst&o,intv){op.find(o)->second->setValue(v);}};插入一个新的Operand没有任何问题。然而,当函数返回时,析构函数被调用,因此ma

c++ - Python -> C++ 习语 : Storing lambda expressions in a map/container

我正在学习C++(通过Qt4)利用我的python/pyqt4经验,但我似乎无法掌握将lambda表达式存储到容器中以用作回调的正确习惯用法。我有一个包含大量字段的结构。我想创建一个回调映射,可以以特定方式正确格式化字段。这是我想做的python等价物:fromPyQt4.QtCoreimportQVariant,QStringclassAType(object):def__init__(self):self.name="FOO"self.attr2="BAR"self.attr3="BAZ"#...callbacks={}callbacks['name']=lambdax:QVari

c++ - OpenGL:GL_TEXTURE_CUBE_MAP 和 GL_REFLECTION_MAP

我目前正在使用OpenGL开发一个项目。每次我尝试引用GL_TEXTURE_CUBE_MAP和GL_REFLECTION_MAP时,它们在我看来都是未定义的。我已经包含了gl.h、glu.h和glut.h,但它们仍然显示为未定义。有什么建议吗? 最佳答案 OpenGL-1.1之后的所有内容都不是Windows操作系统ABI(二进制接口(interface))规范和GLXOpenGL-1.2规范的一部分(Linux即将获得修订的OpenGLABI)任何超出该功能的内容都必须在运行时通过扩展加载机制加载,即使它是核心功能。使用GLEW最

使用 g++ 4.6 和 boost::unordered_map 的 C++11 相关编译错误

我有一段C++代码会因编译错误而失败,除非它在​​C++11模式下运行,但我无法弄清楚为什么会这样,因为代码没有(明确地)使用C++11特点:#include#include#includestructSomeStruct{boost::unordered_mapintMap;};intmain(intargc,constchar*argv[]){std::vectorvals;vals.resize(100);}在使用gcc4.6.3-1ubuntu5和boost1.48的Ubuntu12.0464位机器上编译时:g++test.cpp然后我得到这个编译错误:Infileinclud

c++ - 如何完全管理 std 容器(如 map)的堆内存分配?

我对使用多个stdmap很感兴趣,我希望它们都从一个公共(public)内存池中分配元素。根据我目前所读的内容,我可以使用自定义分配器(例如Boostpool_alloc)来实现这一点。我的问题是,尽管使用Boostpool_alloc之类的东西来管理元素本身的分配,stdmap是否仍会使用少量堆内存作为某种形式的容器开销,boostpool_alloc不会管理这些开销?我在考虑关于使用标准映射本身的指向元素的指针? 最佳答案 精简版map类型,例如:typedefstd::map,boost::pool_allocator>>AM