
Hi, I am trying to create a unordered_map in shared memory using Boost Interprocess library. Here, is the code, which I'm trying to use (taking examples from Boost Interprocess documentation): #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/allocator.hpp> #include <functional> #include <boost/functional/hash.hpp> #include <boost/unordered_map.hpp> #include <iostream> #include <string> #include <boost/interprocess/containers/string.hpp> namespace bipc = boost::interprocess; typedef bipc::allocator<char, bipc::managed_shared_memory::segment_manager> CharAllocator; typedef bipc::basic_string<char, std::char_traits<char>, CharAllocator> ShmemString; struct Person { int age; ShmemString name; double salary; Person(int i, double sal, const char* s, const char_allocator& a) : age(i), name(s, a), salary(sal) { } void print() {} } typedef ShmemString KeyType; typedef Person MappedType; typedef std::pair< KeyType, MappedType > MapPersonType; typedef bipc::allocator< MapPersonType, bipc::managed_shared_memory::segment_manager > ShMemAllocator; typedef boost::unordered_map< KeyType, MappedType, boost::hash<KeyType>, std::equal_to<KeyType>, ShMemAllocator > PersonMap; In the main reader program, I create a map in the shared memory and I insert an object in this map: int main() { bipc::managed_shared_memory segment(bipc::create_only, "MySharedMemory", 65536); PersonMap *persons = segment.construct<PersonMap>("MyHashMap") ( 3, boost::hash<ShmemString>(), std::equal_to<ShmemString>() , segment.get_allocator<MapPersonType>()); char_allocator alloc(segment.get_allocator<char>()); Person p1(20, 10000, "ABC", alloc); persons->insert(MapPersonType(ShmemString("Person1", alloc), p1)); } However, when I am trying to access the map in the reader program, I need to use a syntax like persons->at(ShmemString("H", segment.get_allocator<char>())).print(); However, I would prefer to do this with a std::string, which results in compilation errors: persons->at(std::string("H")).print(); Is it possible to write the above statement, i.e. accessing the map allocated in shared memory with std::string? Thanks.