Карты недвижимости остаются необходимыми для BGL?

После объявления std::map<std::string, std::string> M можно:

  1. Написать на карту: M["Jack"] = "323 Union St";
  2. Читайте с карты: std::cout << M["Jack"];

И все же после объявления boost::associative_property_map<std::map<std::string, std::string>> PM(M) мы не можем сделать гораздо больше, чем:

  1. Напишите на карту недвижимости: boost::put(PM, "Fred", "323 Union St");
  2. Читайте с карты недвижимости: 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-файл).

Другие вопросы по тегам