i007.cc

i007.cc

优先队列-降维打击

c++中用boost实现共享内存创建map容器

c++中用boost实现共享内存创建map容器

[cpp] view plain copy

  1. #include <boost/interprocess/managed_shared_memory.hpp>
  2. #include <boost/interprocess/allocators/allocator.hpp>
  3. #include <boost/interprocess/containers/map.hpp>
  4. #include <boost/interprocess/containers/string.hpp>
  5. #include <iostream>
  6. using namespace boost::interprocess;
  7. using std::cout;
  8. using std::endl;
  9. //类型和allocator的定义,使用共享内存时需要使用boost::interprocess中
  10. //重新实现的容器而不能使用标准容器
  11. typedef managed_shared_memory::segment_manager                       segment_manager_t;
  12. typedef allocator<void, segment_manager_t>                           void_allocator;
  13. /*– 自定义string数据类型 –*/
  14. typedef allocator<char, segment_manager_t>                           char_allocator;
  15. typedef basic_string<char, std::char_traits<char>, char_allocator>   char_string;
  16. /*– 自定义map<string, string>数据类型 –*/
  17. typedef std::pair<const char_string, char_string> string_string_value_type;
  18. typedef allocator<string_string_value_type, segment_manager_t> string_string_map_allocator;
  19. typedef map<char_string, char_string, std::less<char_string>, string_string_map_allocator>  string_string_map;
  20. /*– 自定义map<string, map<string, string>> –*/
  21. typedef std::pair<const char_string, string_string_map> string_string_string_value_type;
  22. typedef allocator<string_string_string_value_type, segment_manager_t> string_string_string_map_allocator;
  23. typedef map<char_string, string_string_map, std::less<char_string>, string_string_string_map_allocator>  string_string_string_map;
  24. int main()
  25. {
  26.     /* —创建共享内存,并创建map— */
  27.     //移除共享内存
  28.     shared_memory_object::remove(“MySharedMemory”);
  29.     //创建共享内存,并指定名称和大小
  30.     managed_shared_memory segment(open_or_create, “MySharedMemory”, 102400);
  31.     void_allocator alloc_inst(segment.get_segment_manager());
  32.     //在共享内存上构建string_string_string_map,并返回指针
  33.     string_string_string_map *table_map = segment.construct<string_string_string_map>(“table_map”)(std::less<char_string>(), alloc_inst);
  34.     //构建自定义string
  35.     char_string  key_key_string(“tag”, alloc_inst);
  36.     char_string  key_string(“fvalue”, alloc_inst);
  37.     char_string  value_string(“tag_fvalue”, alloc_inst);
  38.     //构建自定义map<string, string>的键值对,不能够使用std::string
  39.     string_string_value_type  ss_map_value(key_string, value_string);
  40.     //在共享内存上构建string_string_map并返回指针
  41.     string_string_map *col_map = segment.construct<string_string_map>
  42.         (“tag_fvalue”)(std::less<char_string>(), alloc_inst);
  43.     col_map->insert(ss_map_value);
  44.     //构建自定义map<string, map<string, string>>的键值对
  45.     string_string_string_value_type sss_map_value(key_key_string, *col_map);
  46.     table_map->insert(sss_map_value);
  47.     /* —读取共享内存,并解析map— */
  48.     managed_shared_memory segment1(open_or_create, “MySharedMemory”, 102400);
  49.     string_string_string_map *table_map2 = segment1.find<string_string_string_map>(“table_map”).first;
  50.     //创建对应迭代器
  51.     string_string_string_map::iterator sss_ite;
  52.     string_string_map::iterator ss_ite;
  53.     char_string key_name1(“tag”, alloc_inst);
  54.     char_string key_name2(“fvalue”, alloc_inst);
  55.     //从map中遍历数据,与stl的map一致
  56.     sss_ite = table_map2->find(key_name1);
  57.     if (sss_ite != table_map2->end())
  58.     {
  59.         cout << sss_ite->first << endl;
  60.         ss_ite = sss_ite->second.find(key_name2);
  61.         cout << ss_ite->second << endl;
  62.     }
  63.     return 0;
  64. }

看了关于boost实现共享内存和boost在共享内存中创建vector的帖子,但是没有发现有嵌套map的资料,就把以前写的例子贴出来了。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010087712/article/details/50686417
个人分类: 编程技巧

发表回复