Hi,
This is in continuation of the current discussion of map objects in root. Following is a code which works very fine with standard c++ but not with root.
//============================================================= // This Programs work fine in standart C++.// But it throw errors when used in root as // follows:
// .L map.cc;
// main();
#include<map>
#include<iostream>
void AddEntryToMap(std::map<int, float>& Map);
void PrintTheMap(std::map<int, float>& Map);
int main()
{
std::map<int, float> Map;
AddEntryToMap(Map);
PrintTheMap(Map);
}
void AddEntryToMap(std::map<int, float>& Map)
{
Map[0]=1;
Map[1]=2.3;
}
void PrintTheMap(std::map<int, float>& Map)
{
std::map<int, float>::iterator it = Map.begin();
while(it!=Map.end() )
{
std::cout<<it->first<<" "<<it->second<<std::endl; it++;
//========================================================
I wonder what the problem is ?
Anil Singh
FermiLab
> Hi, > > It seems that root does not allow us to define a pointer/ iterator > to map<int, float> object. If we do following on interactive > root mode: > ============================= > > #include<map> > std::map<int, int>::iterator iter; > > ============================= > > The declaration is accepted without a complaint. On the other hand, > > ============================= > std::map<int, float>::iterator flt; > ============================= > > this declaration gives an error: > > ---------------------------------------------------------------------------------------------- > Symbol iteratorflt is not defined in current scope (tmpfile) (1) > ***Interpreter error recovererd*** > ------------------------------------------------------------------------------------------------ > > I also had a problem similar to your's when it tried to define a > function like: > > void AddEntryToMap( std::map<int, float>& Map) > { > Map[0] =1; > Map[1] =3.2; > } > > this function when called shot an error, which I can remember at the > moment...I will > send a follow up mail soon.....about it. > > Anil > > > > > > > > > ----- Original Message ----- > From: Christopher Jones <c_jones_at_MIT.EDU> > Date: Sunday, December 14, 2008 6:47 pm > Subject: Re: [ROOT] map<int, float>::iterator > To: Anil Singh <anil79_at_fnal.gov> > Cc: roottalk_at_cern.ch > > > > By "not work" do you mean that when you try to dereference the > > map<int, float> iterator, you get an error? Could you paste your error? > > > > I have no problem using map<int, int>s either, but: > > > > >map<int, float> map1; > > >map1[3] = 4.32; // test values > > >map1[4] = 5.67; > > >map<int, float>::iterator it = map1.begin(); > > > > >*it; // same error if you try it->first or it->second > > Error: Illegal pointer operation (tovalue) (tmpfile):1: > > (const class map<int,float,less<int>,allocator<pair<const int,float> > > > > > > >::iterator)0 > > *** Interpreter error recovered *** > > > > I have the same problem making std::vectors of pair< int, float >, > > > even though I can define pairs and access them just fine. I think > > > ROOT has trouble dealing with maps because it can't handle > collections > > > > of pairs (and I think maps are handled as pairs). > > > > On Dec 14, 2008, at 7:08 PM, Anil Singh wrote: > > > > > Hi All, > > > > > > I am working with a code that reqire extensive use of > > > std::map objects . I was trying to do something like : > > > //-------------------------- > > > { > > > #include<map> > > > using namespace std; > > > std::map<int, int>::iterator int_iter; > > > std::map<int, float>::iterator flt_iter; > > > } > > > //---------------------------- > > > > > > It seems that though "std::map<int, int>::iterator" is > > > > fine but > > > "std::map<int, float>::iterator", does not work at all...... > > > Any help is appreciated. > > > Anil Singh > > > FermiLab > > > > > > > Chris Jones > > c_jones_at_mit.edu > > > > > > > > > > >Received on Mon Dec 15 2008 - 07:57:59 CET
This archive was generated by hypermail 2.2.0 : Mon Dec 15 2008 - 11:50:02 CET