草庐IT

cluster_map

全部标签

c++ - boost::unordered_map -- 需要指定自定义哈希函数来散列 std::set<int> 吗?

我想使用boost::unordered_map,其中key是std::set.由于一组整数不是内置类型,我假设我必须提供我自己的散列函数(或者,更确切地说,我正在考虑使用boost'shash_range)。但是,现在我尝试像这样初始化散列映射,既不提供散列函数也不提供相等谓词——而且gcc没有提示。这里发生了什么?boost是否足够聪明,可以自行散列所有STL容器?这会比我使用自定义哈希函数慢吗?使用boost::hash_range怎么样??提前致谢。 最佳答案 根据theBoostdocumentation:thedefau

c++ - unordered_map 如何导致 sigsegv

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。编辑:已解决,我知道怎么做,但我不明白为什么。我改变了variables来自的声明tr1::unordered_mapvariables;到unordered_mapvariables;它工作正常。如果您知道原因,请将其写在答案中。我有一个非常大的程序,所以我不知道应该把哪个代码放在这里。有抽象类,继承派生类。摘要有unordered_map(模板)作为私有(private)成员和公共(publ

C++ map<K,T> 初始化

我正在阅读“IvorHorton的BeginningProgrammingVisualC++2010”,我正在阅读第10章-标准模板库。我的问题是map容器mapmapname.这本书向我展示了很多向其中添加元素的方法,例如pair并使用make_pair()功能稍后,和mapname.insert(pair).但是突然他引入了一个添加元素的技巧,用在下面的代码中:intmain(){std::mapwordscoutbegin(cin);std::istream_iteratorend;while(being!=end)//iterateoverwordsinthestream//P

c++ 从 3 个浮点值生成 unordered_map 的键

我真的不明白:我正在读取二进制文件中的点,每个点都包含3个浮点值。将这些点保存在unordered_map中因此我尝试从这3个浮点值中创建一个键:初衷:只需使用确切的位作为key:unordered_map>points;stringvecToKey(float*a){charbytes[12];memcpy(bytes,a,12);returnstring(bytes);}关键是我绝对想用这种方式消除相同的点但是在一个示例项目中读取了大约21374点map结果大小=10640点使用以下方法作为key创建会产生正确的结果共10687点stringvec3ToKey(floata[3])

c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>

我正在尝试创建指向我的对象的指针数组的散列。散列键是对象类型的int,数组是要渲染的对象列表。我想做的是:unordered_map>drawQueue;drawQueue.clear();//newemptydrawqueuefor(...){drawQueue.at(type).push_back(my_obj);}所以我对STL东西的细微差别还不够熟悉,因为我得到一个异常,说out_of_bounds,这是当key不存在时发生的情况。所以我想我需要先创建key,然后添加到vector中:if(drawQueue.count(type)){//keyalreadyexistsdra

c++ - 将 std::map 复制/插入到 boost::bimap

我尝试将std::map的元素复制到boost::bimap中。我无法让std::copy工作(boost文档似乎表明bimap应该与std::copy兼容)。我尝试了以下方法:std::mapcurves;boost::bimap,boost::bimaps::multiset_of>m_curves;...//someinitialisationofcurvesstd::copy(curves.begin(),curves.end(),std::inserter(m_curves,m_curves.end()));//Thisfailsm_curves.insert(curves.

c++ - std::map 的大小大于调试器中显示的元素数量

VC2010的调试器显示的元素个数怎么会小于map的大小呢?我有137个元素,它只显示100个,用printf就打印出来了。 最佳答案 调试器中显示的项目似乎有100个限制。服务包1将此限制增加到2000:关于MicrosoftConnect的详细信息 关于c++-std::map的大小大于调试器中显示的元素数量,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12226791/

c++ - std::map 插入错误:没有运算符 "<"匹配这些操作数

在尝试提高我的C++和STL熟练程度时,遇到了std::map的问题,该问题由我定义的结构键入。相关代码:typedefstructkey_t{inta;intb;booloperator==(constkey_t&rhs){return(a==rhs.a)&&(b==rhs.b);}booloperatorfooMap;voidfunc(void){key_tkey;key.a=1;key.b=2;fooMap.insert(std::pair(key,100));}错误看起来像这样:"/opt/[redacted]/include/functional",line133:error

c++ - 避免在 unordered_map 插入中进行额外处理

我有一个std::unordered_map,我希望两者都递增std::pair中的第一个值,通过key散列>,并创建对key的引用。例如:std::unordered_map>hash;hash[key].first++;autoit(hash.find(key));int&my_ref(it->first);我可以不使用[]运算符,而是使用insert()插入数据,但我会分配一对,即使它是稍后释放,因为hash可能已经有key——虽然不确定。让它更清楚://If"key"isalreadyinserted,thepair(s)willbeallocated//andthendeal

c++ - 在内存中实现无限 map

我将不得不在程序内存中实现无穷无尽的3D栅格map。map可能会也可能不会从[0;0;0]开始。map的Y坐标限制为255,其他可能无限大。(是的,现在,你可能已经猜到这是一张Minecraftmap)我需要创建一些具有简单McMap::getBlock(intx,shorty,intz)和McMap::setBlock(intx,shorty,intz)方法。意味着我需要能够读取和写入数据。我还希望能够删除block,从而释放内存。用户应该为此目的做什么?我认为最好的解决方案是一些具有这种结构的表:intx|shorty|intz|intblockid|othervalues...-