
Thanks Ion. I have tried the following sample, I see one issue that "find" is failing in the following sample. #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/unordered_map.hpp> #include <boost/interprocess/containers/set.hpp> #include <boost/interprocess/containers/map.hpp> #include <boost/interprocess/containers/vector.hpp> #include <boost/interprocess/containers/string.hpp> #include <boost/interprocess/allocators/allocator.hpp> #include <iostream> // Define your types using timer_id_t = int; struct timer_instance_t { int id; // Example member }; // Define allocators for shared memory typedef boost::interprocess::allocator<timer_instance_t, boost::interprocess::managed_shared_memory::segment_manager> TimerAllocator; typedef boost::interprocess::allocator<std::pair<const timer_id_t, timer_instance_t>, boost::interprocess::managed_shared_memory::segment_manager> MapAllocator; // Define the unordered_map type typedef boost::unordered_map<timer_id_t, timer_instance_t, std::hash<timer_id_t>, std::less<timer_id_t>, MapAllocator> timer_instance_map_t; int main() { using namespace boost::interprocess; // Create managed shared memory managed_shared_memory segment(open_or_create, "MySharedMemory", 65536); // Construct the unordered map in shared memory timer_instance_map_t* timer_instance_map = segment.find_or_construct<timer_instance_map_t>("TimerInstanceMap")(10, std::hash<timer_id_t>(), std::less<timer_id_t>(), segment.get_segment_manager()); // Allocate a timer_instance_t in shared memory timer_instance_t* instance = segment.construct<timer_instance_t>("TimerInstance")(); // Use emplace to insert the timer_instance_t pointer into the map timer_id_t id = 100; timer_instance_map->emplace(id, *instance); // Copy the allocated instance into the map // Accessing the instance auto it = timer_instance_map->find(id); if (it != timer_instance_map->end()) { std::cout << "Found timer instance with id: " << it->second.id << std::endl; } else { std::cout << "Timer instance not found." << std::endl; } for (const auto& pair : *timer_instance_map) { std::cout <<"Timer Id: " << pair.first <<", Timer Instance Id: " << pair.second.id<< std::endl; } // Cleanup: You may want to remove the shared memory segment shared_memory_object::remove("MySharedMemory"); return 0; } output: Timer Instance not found. Timer Id: 100, Timer Instance Id: 0 need help in understanding why find is failing. Regards, Murali Kishore On Mon, Sep 9, 2024 at 8:42 PM Ion Gaztañaga <igaztanaga@gmail.com> wrote:
El 09/09/2024 a las 15:18, Murali Kishore via Boost escribió:
Hi all,
I see multiset is not present in boost interprocess, so I tried to use a "set" with a customized comparator to achieve multiset functionality.
You can use any Boost.Container container with Boost.Interprocess, including multiset.
Boost.Interprocess own container aliases will be deprecated soon, since they only forward to Boost.Container. I'll maintain those container header inside Interprocess for backwards compatibility for several Boost releases but in the end they will be removed.
Best,
Ion
-- Regards, Murali Kishore