Карты недвижимости остаются необходимыми для BGL?
После объявления std::map<std::string, std::string> M
можно:
- Написать на карту:
M["Jack"] = "323 Union St";
- Читайте с карты:
std::cout << M["Jack"];
И все же после объявления boost::associative_property_map<std::map<std::string, std::string>> PM(M)
мы не можем сделать гораздо больше, чем:
- Напишите на карту недвижимости:
boost::put(PM, "Fred", "323 Union St");
- Читайте с карты недвижимости:
boost::get(PM, "Fred");
Что вы можете сделать с картой свойств, которую вы уже не можете сделать с картой?
контекст
Рассмотрим кого-то, для кого
#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
явно ложно. IIUC, карты свойств так интенсивно использовались в BGL с 1998 по 2002 год, чтобы исключить необходимость написания одной библиотеки для MSVC и другой для gcc. Идея, очевидно, заключалась в том, что MSVC будет обрабатывать, gcc также с удовольствием справится. Теперь, когда MSVC обрабатывает C++98, карты свойств по-прежнему необходимы или они просто реликвия? Почему?
2 ответа
PropertyMaps
в значительной степени интерфейс для абстрагирования записи и чтения данных и через него, чтобы скрыть реализацию хранилища.
Вашему интерфейсу иногда требуется доступ к данным, и вы не хотите навязывать пользователям тип хранилища. И наоборот, вы когда-нибудь предоставляете хранилище данных, но хотите скрыть его реализацию. В обоих случаях карты свойств обеспечивают хорошее решение, для которого требования AssociativeSequence стандартной библиотеки не очень подходят.
Вот некоторая предыстория на карте недвижимости, чтобы похвалить ответ pmr.
Как я уже упоминал в комментарии. Согласно технической документации ( Библиотека карт недвижимости):
"Потребность в картах свойств возникла в результате разработки библиотеки графов ускорения, алгоритмы которой нуждались в интерфейсе для доступа к свойствам, прикрепленным к вершинам и ребрам графа. В этом контексте дескрипторы вершин и ребер являются ключевым типом карт свойств ".
Это интерфейс, в основном то, что говорит pmr.
Я не нашел никакой информации, касающейся MSVC.
Позже, в разделе истории, они говорят:
"Интерфейс карты свойств возник в качестве средства доступа к данным в магистерской диссертации Дитмара Кюля об общих алгоритмах графов. Идея карты свойств также появилась под видом декораторов в ранних версиях библиотеки компонентов общего графа (GGCL), которая теперь является библиотекой графов ускорения. (BGL). Основной мотивацией для интерфейса карты свойств была поддержка доступа к данным, связанным с вершинами и ребрами графа, хотя применимость карт свойств выходит за рамки этого ".
Вы также можете взглянуть на алгоритмы родового графика Дитмара Кюля от Springer (или ученый Google и нажать "все версии", чтобы найти PDF-файл).