Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Hash map question.

Reply
Thread Tools

Hash map question.

 
 
Jim Lynch
Guest
Posts: n/a
 
      06-15-2004
I've searched google for help with this one, but I haven't found it yet.
What I want is a hash map this looks like:
__gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;

ArcNode is a class. It looks something like this:

class ArcNode
{
private:
// communication objects
int fdSocket;
public:
ArcNode();
~ArcNode();
int write(string);
int read(string&);
int open(string);
int state();

};

But when I try to compile I get:
In file included from main.cpp:3:
/usr/include/c++/3.2.2/bits/stl_pair.h: In instantiation of
`std:air<const std::string, ArcNode&>':
/usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
`std::_Select1st<std:air<const std::string, ArcNode&> >'
/usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
`__gnu_cxx::hashtable<std:air<const std::string, ArcNode&>,
std::string, __gnu_cxx::hash<std::string>,
std::_Select1st<std:air<const std::string, ArcNode&> >,
std::equal_to<std::string>, std::allocator<ArcNode&> >'
/usr/include/c++/3.2.2/ext/hash_map:101: instantiated from
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >'
loggerbase.h:48: instantiated from here
/usr/include/c++/3.2.2/bits/stl_pair.h:84: forming reference to
reference type
`ArcNode&'
/usr/include/c++/3.2.2/ext/hash_map: In instantiation of
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >':
loggerbase.h:48: instantiated from here
/usr/include/c++/3.2.2/ext/hash_map:182: forming reference to reference
type `
ArcNode&'
make: *** [logger] Error 1

I don't understand the reference to reference error message. Can
someone tell me what I'm doing wrong. A pointer to a tutorial that
discusses how to put objects into a hash_map would also be helpful.

Thanks,
Jim.



--
Jim Lynch
http://www.velocityreviews.com/forums/(E-Mail Removed)

 
Reply With Quote
 
 
 
 
Pete C.
Guest
Posts: n/a
 
      06-15-2004
Jim Lynch wrote:
> I've searched google for help with this one, but I haven't found it
> yet. What I want is a hash map this looks like:
> __gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;
>

<snip>

"hash_map" is not Standard C++. Please consult a group for your library.

- Pete


 
Reply With Quote
 
 
 
 
Buster
Guest
Posts: n/a
 
      06-15-2004
Jim Lynch wrote:
> I've searched google for help with this one, but I haven't found it yet.
> What I want is a hash map this looks like:
> __gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;


What you seem to have instead is

> `__gnu_cxx::hash_map<std::string, ArcNode&,
> __gnu_cxx::hash<std::string>, std::equal_to<std::string>,
> std::allocator<ArcNode&> >'


(I might be wrong about this; you didn't post your code and I don't know
the gnu hash_map implementation well enough to be able to say for sure
that it doesn't go around adding ampersands willy-nilly like that. I'd
be surprised though.)

Don't use a reference type as the second template argument. Reference
types do not model the concepts required (Assignable for a start).

Ideally you could read about this at, for example,
http://www.sgi.com/tech/stl/PairAsso...Container.html

Perhaps best not to take the information from there too seriously in
this case - the basic situation appears to be:

(i) Pair Associative Container is a refinement of Container;
(ii) The value_type of a Container is required to be Assignable;
(iii) The value_type of a Pair Associative Container is required
to be std:air <const key_type, data_type>;
(iv) std:air <const key_type, data_type> is not Assignable.

Therefore 2+2=5, green is pink, and main returns void, QED.

--
Regards,
Buster.
 
Reply With Quote
 
Jorge Rivera
Guest
Posts: n/a
 
      06-15-2004
Jim Lynch wrote:
> I've searched google for help with this one, but I haven't found it yet.
> What I want is a hash map this looks like:
> __gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;
>


Try std::hash_map<std::string, ArcNode> ArcNodeMap;

Although hash_map is not part of the STL (as approved by the standard),
I know some implementations include it in this namespace. Give it a try.

> ArcNode is a class. It looks something like this:
>
> class ArcNode
> {
> private:
> // communication objects
> int fdSocket;
> public:
> ArcNode();
> ~ArcNode();
> int write(string);
> int read(string&);
> int open(string);
> int state();
>
> };
>
> But when I try to compile I get:
> In file included from main.cpp:3:
> /usr/include/c++/3.2.2/bits/stl_pair.h: In instantiation of
> `std:air<const std::string, ArcNode&>':
> /usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
> `std::_Select1st<std:air<const std::string, ArcNode&> >'
> /usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
> `__gnu_cxx::hashtable<std:air<const std::string, ArcNode&>,
> std::string, __gnu_cxx::hash<std::string>,
> std::_Select1st<std:air<const std::string, ArcNode&> >,
> std::equal_to<std::string>, std::allocator<ArcNode&> >'
> /usr/include/c++/3.2.2/ext/hash_map:101: instantiated from
> `__gnu_cxx::hash_map<std::string, ArcNode&,
> __gnu_cxx::hash<std::string>, std::equal_to<std::string>,
> std::allocator<ArcNode&> >'
> loggerbase.h:48: instantiated from here
> /usr/include/c++/3.2.2/bits/stl_pair.h:84: forming reference to
> reference type
> `ArcNode&'
> /usr/include/c++/3.2.2/ext/hash_map: In instantiation of
> `__gnu_cxx::hash_map<std::string, ArcNode&,
> __gnu_cxx::hash<std::string>, std::equal_to<std::string>,
> std::allocator<ArcNode&> >':
> loggerbase.h:48: instantiated from here
> /usr/include/c++/3.2.2/ext/hash_map:182: forming reference to reference
> type `
> ArcNode&'
> make: *** [logger] Error 1
>


You need to post code here. This means that whatever you are trying to
do, it is trying to acquire a reference to a reference, which is illegal
in C++.

Jorge L.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
hash of hash of hash of hash in c++ rp C++ 1 11-10-2011 04:45 PM
Hash#select returns an array but Hash#reject returns a hash... Srijayanth Sridhar Ruby 19 07-02-2008 12:49 PM
how to put the content of one hash map to another hash map navS C++ 3 05-09-2008 12:52 PM
STL map or hash map using struct as data and find it kl C++ 7 01-01-2008 11:05 AM
Hash Map slower than Map. Amit Bhatia C++ 7 10-09-2007 09:33 AM



Advertisments