doc_multi_index.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 92 行

CPP
92
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2006-2007. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/detail/workaround.hpp>//[doc_multi_index#include <boost/interprocess/managed_shared_memory.hpp>#include <boost/interprocess/allocators/allocator.hpp>#include <boost/interprocess/containers/string.hpp>#include <boost/multi_index_container.hpp>#include <boost/multi_index/member.hpp>#include <boost/multi_index/ordered_index.hpp>using namespace boost::interprocess;namespace bmi = boost::multi_index;typedef managed_shared_memory::allocator<char>::type              char_allocator;typedef basic_string<char, std::char_traits<char>, char_allocator>shm_string;//Data to insert in shared memorystruct employee{   int         id;   int         age;   shm_string  name;   employee( int id_           , int age_           , const char *name_           , const char_allocator &a)      : id(id_), age(age_), name(name_, a)   {}};//Tagsstruct id{};struct age{};struct name{};// Define a multi_index_container of employees with following indices://   - a unique index sorted by employee::int,//   - a non-unique index sorted by employee::name,//   - a non-unique index sorted by employee::age.typedef bmi::multi_index_container<  employee,  bmi::indexed_by<    bmi::ordered_unique      <bmi::tag<id>,  BOOST_MULTI_INDEX_MEMBER(employee,int,id)>,    bmi::ordered_non_unique<      bmi::tag<name>,BOOST_MULTI_INDEX_MEMBER(employee,shm_string,name)>,    bmi::ordered_non_unique      <bmi::tag<age>, BOOST_MULTI_INDEX_MEMBER(employee,int,age)> >,  managed_shared_memory::allocator<employee>::type> employee_set;int main (){   //Erase previous shared memory with the name   shared_memory_object::remove("MySharedMemory");   try{      //Create shared memory      managed_shared_memory segment(create_only,"MySharedMemory", 65536);      //Construct the multi_index in shared memory      employee_set *es = segment.construct<employee_set>         ("My MultiIndex Container")            //Container's name in shared memory         ( employee_set::ctor_args_list()         , segment.get_allocator<employee>());  //Ctor parameters      //Now insert elements      char_allocator ca(segment.get_allocator<char>());      es->insert(employee(0,31, "Joe", ca));      es->insert(employee(1,27, "Robert", ca));      es->insert(employee(2,40, "John", ca));   }   catch(...){      shared_memory_object::remove("MySharedMemory");      throw;   }   shared_memory_object::remove("MySharedMemory");   return 0;}//]#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?