подскажите по выбору контейнера/архитектуре
От: niXman Ниоткуда https://github.com/niXman
Дата: 13.10.14 08:20
Оценка:
хайюжъки!

есть некоторые типы, наследники такого интерфейса:
struct processor {
   virtual void process(const void *ptr, const std::size_t size) = 0;
};

реализации наследников юзер добавляет в некоторый класс посредством метода void reg(const std::uint32_t proc_id, std::unique_ptr<processor> p) {...}
далее, в этом классе есть метод void process(const std::uint32_t proc_id, const void *ptr, const std::size_t size) {...}
тут, proc_id служит для идентификации объекта-реализации типа processor. т.е. напрашивается вывод о том, что эти объекты логично хранить в каком-либо ассоциативном контейнере. но загвоздка в том, что деструктится эти объекты должны в порядке обратном от того, в котором добавлялись.
т.е. std::map<> отпадает из-за того, что он сортирует по ключу, а std::unordered_map<> отпадает из-за того, что порядок не определен.
таким образом, решение вижу в использовании двух контейнеров. к примеру, для хранения использовать std::list<std::unique_ptr<processor>>, и после вставки элемента, передавать его итератор в std::unordered_map<std::uint32_t, list_iterator>.

какие еще мысли?

спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 13.10.2014 8:30 niXman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.