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

#include 
#include 
#include 
#include 
#include 

using namespace boost::interprocess;
using std::cout;
using std::endl;

//类型和allocator的定义,使用共享内存时需要使用boost::interprocess中
//重新实现的容器而不能使用标准容器
typedef managed_shared_memory::segment_manager                       segment_manager_t;
typedef allocator                           void_allocator;

/*-- 自定义string数据类型 --*/
typedef allocator                           char_allocator;
typedef basic_string, char_allocator>   char_string;

/*-- 自定义map数据类型 --*/
typedef std::pair string_string_value_type;
typedef allocator string_string_map_allocator;
typedef map, string_string_map_allocator>  string_string_map;

/*-- 自定义map> --*/
typedef std::pair string_string_string_value_type;
typedef allocator string_string_string_map_allocator;
typedef map, string_string_string_map_allocator>  string_string_string_map;

int main()
{
    /* ---创建共享内存,并创建map--- */

    //移除共享内存
    shared_memory_object::remove("MySharedMemory");
    //创建共享内存,并指定名称和大小
    managed_shared_memory segment(open_or_create, "MySharedMemory", 102400);

    void_allocator alloc_inst(segment.get_segment_manager());

    //在共享内存上构建string_string_string_map,并返回指针
    string_string_string_map *table_map = segment.construct("table_map")(std::less(), alloc_inst);    

    //构建自定义string
    char_string  key_key_string("tag", alloc_inst);  
    char_string  key_string("fvalue", alloc_inst);
    char_string  value_string("tag_fvalue", alloc_inst);

    //构建自定义map的键值对,不能够使用std::string
    string_string_value_type  ss_map_value(key_string, value_string);

    //在共享内存上构建string_string_map并返回指针
    string_string_map *col_map = segment.construct
        ("tag_fvalue")(std::less(), alloc_inst);

    col_map->insert(ss_map_value);

    //构建自定义map>的键值对
    string_string_string_value_type sss_map_value(key_key_string, *col_map);

    table_map->insert(sss_map_value);

    /* ---读取共享内存,并解析map--- */
    managed_shared_memory segment1(open_or_create, "MySharedMemory", 102400);

    string_string_string_map *table_map2 = segment1.find("table_map").first;

    //创建对应迭代器
    string_string_string_map::iterator sss_ite;
    string_string_map::iterator ss_ite;

    char_string key_name1("tag", alloc_inst);
    char_string key_name2("fvalue", alloc_inst);

    //从map中遍历数据,与stl的map一致
    sss_ite = table_map2->find(key_name1);

    if (sss_ite != table_map2->end())
    {
        cout << sss_ite->first << endl;
        ss_ite = sss_ite->second.find(key_name2);
        cout << ss_ite->second << endl;
    }

    return 0;
}

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

你可能感兴趣的:(编程技巧)