草庐IT

concurrent_hash_map

全部标签

C++ 遍历模板 Map

当我有一个模板类,其中包含模板映射和const_iterator由typedef声明为以下代码时,我如何遍历映射外部的元素类,feinmain将它们打印在输出上?templateclasstemplate_map{private:typedeftypenamestd::mapTMap;TMapmy_map;public:typedeftypenameTMap::const_iteratorconst_iterator;...};intmain(){template_MapMap1//supposethatcontainselements?}更新:typedef迭代器可以在类外使用吗?如

c++ - boost::unordered_map 中的迭代器失效

我正在使用boost::unordered_map如下typedefboost::shared_ptrPtrWriter;typedefstd::listPtrList;boost::unordered_map,PtrList>MapMapinstrMap;现在我正在循环中对PtrList类型的列表进行一些更改for(autoit=instrMap.begin();it!=instrMap.end();++it){autokey=it->first();autolist&=it->second();//Makesomechangetoanelementinlistif(list.emp

c++ - 如何在 C++ 中传递 STL 对象的消息,例如 MPI 中的 std::map?

我想使用MPI在C++中传递STL对象,例如std::map和std::list,但我不知道如何实现。 最佳答案 不幸的是,这无法直接实现。您将需要进行某种序列化。既然您提到了MPI,您可能对高性能感兴趣。在这种情况下,使用序列化可能不是最好的主意。所以我会远离更复杂的STL结构,只使用std::vector。 关于c++-如何在C++中传递STL对象的消息,例如MPI中的std::map?,我们在StackOverflow上找到一个类似的问题: https:

c++ - 我尝试定义一个 hash_map 变量在 VS2008 中对我不起作用

我正在使用VisualStudio2008。这是我的代码:#include"stdafx.h"#include#include#includeusingnamespacestd;hash_maphm;intmain(){return0;}这是我的错误:errorC2143:syntaxerror:missing';'before' 最佳答案 在MSVC编译器中,对标准库的扩展放在stdext命名空间中:#includestdext::hash_maphm;intmain(){return0;}免责声明:我没有VS2008,但这应该可

c++ - std::map<key_type, value_type>::find(different_key_type)

我有一张map:std::mapmyMap;但是,在某些情况下,我想通过比较TyString==TyStringRef来std::map::find一个条目,即myMap.find(TyStringRef("MyString"));原因是TyString包装了一个它自己分配和释放的constchar*。但是,为了只找到一个条目,我不喜欢分配一个新的字符串,而是我只想使用引用(TyStringRef只包装一个constchar*而不分配或释放内存)。当然,我可以将TyStringRef转换为TyString,但这样我就有了上述的内存开销。有解决这个问题的智能方法吗?谢谢!

c++ - boost::mpl::map 失败 boost::mpl::equal?

BoostMPL文档指出boost::map::equal"如果两个序列Seq1和Seq2比较_element__element_时是相同的。但似乎没有检查关联序列映射是否相等元素_wise_:下面的演示将展示这一点:Map2应该等于Map3,它们都递增“key”处的“int_”value_type。查看定义Map3的typedef。大小和唯一的元素被转储到演示中:#include#include#include#include#include#include#include#include#include#include#includenamespacempl=boost::mpl;

c++ - 与 hash_combine 发生太多冲突

我将boost::unordered_map与自定义结构一起使用,该结构或多或少是一个整数vector,并具有如下所示的自定义哈希函数:std::size_tseed=0;for(inti=0;i当myvec的大小为3并且我用1M元素1:100x1:100x1:100填充散列(所以myvec的每个元素都是一个从1到100的整数)我得到大约330,000次碰撞。发生这么多次碰撞是否正常?我该怎么做才能避免这种情况? 最佳答案 你是对的。Boost的hash_combine函数对这个数据集的表现很差。您可以使用thiscode进行测试对

c++ - 插入或更新 map

我有一个std::map.给出对,我需要:如果键存在则修改映射中的值,或者如果key不存在,则将对插入到映射中。我是这样做的:if(map.find(key)==map.end()){map.insert(std::pair(key,value));}else{map[key]=value;}这种做法对吗?另外,是否有更快或更惯用的方法来执行此操作? 最佳答案 有多种策略。最简单的就是使用operator[]:map[key]=value;但是它需要value默认可构造和可赋值。此外,由于发生了这些操作,它们可能(在某些情况下)导致

c++ - 将自定义类型作为 map 的可能键的可能方法有哪些

这个问题在这里已经有了答案:HowcanIusestd::mapswithuser-definedtypesaskey?(8个答案)关闭8年前。最近有人问我如何将自定义类型作为STL::map的可能键。直截了当我回答他们要重载“customtype链接”当他们问我还有哪些其他方法可以解决这个问题时。我只是暗示我们也可以通过重载“==”运算符来做到这一点。但他对这个答案并不满意。请帮助我知道,是否有任何其他方法可以解决这个问题“将自定义类型作为map的可能键”。

c++ - Concurrency::parallel_for (PPL) 创建了太多线程

我正在使用Concurrency::parallel_for()VisualStudio2010的并行模式库(PPL)来处理一组索引任务(通常,索引集远大于可以同时运行的线程数)。每个任务,在进行冗长的计算之前,首先从共享资源管理器请求私有(private)工作存储资源(以防万一:任务特定内存映射文件的View,但我认为如果每个任务的故事情节都是一样的请求从共享堆分配私有(private)内存)。共享资源管理器的使用与Concurrency::critical_section同步问题就在这里开始了:如果第一个线程/任务在临界区中并且第二个任务发出请求,它必须等到第一个任务的请求被处理。