Чтобы создать карту свойств итератора, вам нужны два аргумента:
make_iterator_property_map( RAIter iter, ID id )
Отбросьте третий аргумент.
Первое, что у вас есть: f.begin()
— это итератор произвольного доступа к первому элементу.
ID
должна быть картой индекса вершин. В вашем случае вы можете запросить его из графика (поскольку vecS
приводит к неявному индексу вершины):
Жить на Coliru
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/isomorphism.hpp>
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> graph_t;
int main() {
int n = 12;
graph_t g1(n), g2(n);
add_edge(0, 1, g1);
add_edge(1, 2, g1);
add_edge(9, 10, g2);
add_edge(10, 11, g2);
std::vector<graph_t::vertex_descriptor> f(n);
bool ret = isomorphism(
g1, g2,
isomorphism_map(boost::make_iterator_property_map(f.begin(), boost::get(boost::vertex_index, g1)))
);
}
Примечания
Рассмотрите возможность создания безопасной карты итератора:
boost::make_safe_iterator_property_map(f.begin(), n, boost::get(boost::vertex_index, g1))
Если вас не интересует безопасность (?!??), вы можете сделать намного короче:
bool ret = isomorphism(g1, g2, boost::isomorphism_map(f.data()));
Это использует vertex_index
автоматически.
person
sehe
schedule
12.11.2017