Boost logo

Boost Users :

Subject: Re: [Boost-users] [BGL] Question on dijkstra-example.cpp
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2010-11-11 08:12:26


On Thu, 11 Nov 2010, Cedric Laczny wrote:

>
> Hello,
>
> could you please explain what this code in the dijkstra-example
>
> (http://www.boost.org/doc/libs/1_44_0/libs/graph/example/dijkstra-example.cpp) exactly does?
>
> predecessor_map(&p[0]).distance_map(&d[0])
>
> I understand the non-named-parameter version, but the combination of predecessor_map with distance_map is not so
> obvious to me. What does the "." do there?
>
> Do I get it right, that the predecessor_map or distance_map, respectively, automatically wrap the vectors p and d
> into iterator_property_maps?

The . there is separating two named parameters; the BGL named parameter
mechanism uses . to separate parameters instead of , to avoid needing to
have multiple overloads of each function. On your second question, there
is infrastructure in BGL for pointers to be automatically treated as
property maps, and so &p[0] gets a pointer that will go through this
mechanism. I do not recommend writing your own code that way, though; use
iterator_property_map or shared_array_property_map instead since they
express your intentions better and work with more graph types. It is easy
to get very subtle bugs if you use pointers as property maps in code that
doesn't know the exact graph type it will be using.

-- Jeremiah Willcock


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net