In the above, methods inside classes are addressed via the -> operator. Sometimes, one has to use the . operator instead. Unfortunately, we are unable to write efficient code which uses consistently one or the other, so you need to understand the difference. That difference is that x->y() means that x is a pointer, while x.y() means that x is the object itself or a reference to it. As a rule of thumb, we will use ``->'' when we use objects, and ``.'' when we use containers. For example:
{}
typedef map<Id,Node*> Nodes ; // Nodes contains *pointers* to Node!
Nodes nodes ; // nodes is *not* a pointer
...
for (Nodes::iterator nn=nodes.begin() ; // since ``nodes'' is not a
nn!=nodes.end() // pointer, ``.'' is used.
++nn ) {
Node* node = nn->second ; // ``node'' is now a pointer
...
cout << node->id() << endl ; // ``->'' is used
...