RE: [ROOT] Problem with stl map

From: Philippe Canal (pcanal@fnal.gov)
Date: Wed Jul 30 2003 - 17:45:15 MEST


Hi Matthew,

Currently CINT does not expose the operator-> for the iterator.
So instead of
	mit->first
use
	(*mit).first

Cheers,
Philippe

Also:
Only a subset of the possible STL container's instance are pre-build in a
ROOT distribution.
For example all vector of arithmentic type are pre-built.

I just rechecked and map<long,double> is also pre-built however, you have to
use the name:
	map<long,double>
OR
	map<long,double,less<long>,allocator<pair<const long,double> > >
You can not use (to get the pre-built version).
       map<long,double,less<long> >

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matthew Wood
Sent: Wednesday, July 30, 2003 4:59 AM
To: Philippe Canal
Cc: roottalk@pcroot.cern.ch
Subject: RE: [ROOT] Problem with stl map


Hi.  I am still confused by the implementation of STL in ROOT.  For
example the following code with vectors works fine:

#include<vector>

int vec() {

  vector< double > vec;
  vector< double >::iterator vit;

  vec.push_back(5.0);

  vit=vec.begin();

  cout << *vit << endl;

  return 0;

}

But to do the same thing with map I have to go through this business of
precompiling my own library.  Furthermore I can't figure out how to get
map iterators to work properly.  I tried the following:
#include<map>

int map {

  map< long, double, less< long > > m;
  map< long, double, less< long > >::iterator mit;
  m[3]=4.5;
  mit=m.begin();
  cout << mit->first << endl;

  return 0;

}

but got the error:

Error: Symbol mit is not defined in current scope  FILE:test.C LINE:17
Error: Failed to evaluate mit->first(class G__CINT_ENDL)143141208
*** Interpreter error recovered ***

I tried including the line

#pragma link C++ class map<long,double,less<long> >::iterator;

in the MapLoader.C file and recompiled the library but that didn't work
either.  Thank you again for your help.

Matthew Wood

On Tue, 29 Jul 2003, Philippe Canal wrote:

> Hi Matthew,
>
> You should compile you map (rather than trying to use the interpreted
> version).
> The message means that there are already some map instance that has been
> compiled.
>
> Do:
>    // MapLoader.C
>    #include <map>
>    #pragma link C++ class map<long,double,less<long> >;
>    // End of MapLoader.C
>
>    root [] .L MapLoader.C+
>
> Cheers,
> Philippe.
>
> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
> [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matthew Wood
> Sent: Tuesday, July 29, 2003 8:16 AM
> To: roottalk@pcroot.cern.ch
> Subject: [ROOT] Problem with stl map
>
>
> Hi.  I am having trouble using the STL map class and I was hoping someone
> could give me an example that works.  I tried the same code in a C++
> program and it worked fine.  Here is what I am trying ( I am using ROOT
> 3.05/05 ):
>
> root [0] #include <map>
> root [1]test;
> Limitation: Can't instantiate precompiled template
> map<long,double,less<long> > FILE:(tmpfile) LINE:1
> *** Interpreter error recovered ***
>
> Thank you for your help.
>
> Matthew Wood
>


#################################################################
#################################################################
#################################################################
#####
#####
#####
#################################################################
#################################################################
#################################################################



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET