471,584 Members | 1,620 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,584 software developers and data experts.

Why won't this hash_map compile?

Hi,

I'm trying to use hash_map (gcc 3.2.2) with a std::string as the key. It
will compile if I use <map> but I get a bunch of template compile errors
when I change it to hash_map. Any suggestions? My program and the errors
are below...

#include <ext/hash_map>
#include <string>

using namespace std;

__gnu_cxx::hash_map<string, int> storage;

int main()
{
pair<string, int> item("blah", 1);
storage.insert(item);
}

When compiled I get the following:
g++ hm.cpp -o hm
/usr/include/c++/3.2.2/ext/stl_hashtable.h: In member function `size_t
__gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey,
_Alloc>::_M_bkt_num_key(const _Key&, unsigned int) const [with _Val =
std::pair<const std::string, int>, _Key = std::string, _HashFcn =
__gnu_cxx::hash<std::string>, _ExtractKey = std::_Select1st<std::pair<const
std::string, int> >, _EqualKey = std::equal_to<std::string>, _Alloc =
std::allocator<int>]':
/usr/include/c++/3.2.2/ext/stl_hashtable.h:522: instantiated from `size_t
__gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey,
_Alloc>::_M_bkt_num(const _Val&, unsigned int) const [with _Val =
std::pair<const std::string, int>, _Key = std::string, _HashFcn =
__gnu_cxx::hash<std::string>, _ExtractKey = std::_Select1st<std::pair<const
std::string, int> >, _EqualKey = std::equal_to<std::string>, _Alloc =
std::allocator<int>]'
/usr/include/c++/3.2.2/ext/stl_hashtable.h:887: instantiated from `void
__gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey,
_Alloc>::resize(unsigned int) [with _Val = std::pair<const std::string,
int>, _Key = std::string, _HashFcn = __gnu_cxx::hash<std::string>,
_ExtractKey = std::_Select1st<std::pair<const std::string, int> >, _EqualKey
= std::equal_to<std::string>, _Alloc = std::allocator<int>]'
/usr/include/c++/3.2.2/ext/stl_hashtable.h:381: instantiated from
`std::pair<__gnu_cxx::_Hashtable_iterator<_Val, _Key, _HashFcn, _ExtractKey,
_EqualKey, _Alloc>, bool> __gnu_cxx::hashtable<_Val, _Key, _HashFcn,
_ExtractKey, _EqualKey, _Alloc>::insert_unique(const _Val&) [with _Val =
std::pair<const std::string, int>, _Key = std::string, _HashFcn =
__gnu_cxx::hash<std::string>, _ExtractKey = std::_Select1st<std::pair<const
std::string, int> >, _EqualKey = std::equal_to<std::string>, _Alloc =
std::allocator<int>]'
/usr/include/c++/3.2.2/ext/hash_map:171: instantiated from
`std::pair<__gnu_cxx::hashtable<std::pair<const _Key, _Tp>, _Key, _HashFcn,
std::_Select1st<std::pair<const _Key, _Tp> >, _EqualKey, _Alloc>::iterator,
bool> __gnu_cxx::hash_map<_Key, _Tp, _HashFcn, _EqualKey,
_Alloc>::insert(__gnu_cxx::hashtable<std::pair<con st _Key, _Tp>, _Key,
_HashFcn, std::_Select1st<std::pair<const _Key, _Tp> >, _EqualKey,
_Alloc>::value_type&) [with _Key = std::string, _Tp = int, _HashFcn =
__gnu_cxx::hash<std::string>, _EqualKey = std::equal_to<std::string>, _Alloc
= std::allocator<int>]'
hm.cpp:14: instantiated from here
/usr/include/c++/3.2.2/ext/stl_hashtable.h:517: no match for call to `(const
__gnu_cxx::hash<std::string>) (const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >&)'
make: *** [hm] Error 1
Jul 22 '05 #1
3 11700
"Mark" <ma*************@nospamexcite.com> wrote...
I'm trying to use hash_map (gcc 3.2.2) with a std::string as the key. It
will compile if I use <map> but I get a bunch of template compile errors
when I change it to hash_map. Any suggestions?[...]


hash_map is not a standard class or template, so it's OT here unless
you provide its full definition.

If 'hash_map' is part of gcc, I recommend gnu.g++.help newsgroup.

Victor
Jul 22 '05 #2
Mark wrote:
Hi,

I'm trying to use hash_map (gcc 3.2.2) with a std::string as the key. It
will compile if I use <map> but I get a bunch of template compile errors
when I change it to hash_map. Any suggestions? My program and the errors
are below...

#include <ext/hash_map>
#include <string>

using namespace std;

__gnu_cxx::hash_map<string, int> storage;

int main()
{
pair<string, int> item("blah", 1);
storage.insert(item);
}

When compiled I get the following:
g++ hm.cpp -o hm

[...]
Have a look here:
http://gcc.gnu.org/ml/libstdc++/2002-04/msg00107.html

Mike
Jul 22 '05 #3
Perfect! Thanks Michael!

Although I may end up just using <map> since my data is small and it'd be
nice to conform to the standard (although apparently hash_map is being added
to the standard on the next go-around).

Mark
"Michael Mellor" <news-at-@michaelmellor-dot-.com> wrote in message
news:br**********@newsg2.svr.pol.co.uk...
Mark wrote:
Hi,

I'm trying to use hash_map (gcc 3.2.2) with a std::string as the key. It will compile if I use <map> but I get a bunch of template compile errors
when I change it to hash_map. Any suggestions? My program and the errors are below...

#include <ext/hash_map>
#include <string>

using namespace std;

__gnu_cxx::hash_map<string, int> storage;

int main()
{
pair<string, int> item("blah", 1);
storage.insert(item);
}

When compiled I get the following:
g++ hm.cpp -o hm

[...]
Have a look here:
http://gcc.gnu.org/ml/libstdc++/2002-04/msg00107.html

Mike

Jul 22 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by peter_k | last post: by
10 posts views Thread by g | last post: by
1 post views Thread by jayesah | last post: by
2 posts views Thread by Amit Bhatia | last post: by
1 post views Thread by joseysaac | last post: by
2 posts views Thread by marek.vondrak | last post: by
reply views Thread by XIAOLAOHU | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.