By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,191 Members | 813 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,191 IT Pros & Developers. It's quick & easy.

Why won't this hash_map compile?

P: n/a
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
Share this Question
Share on Google+
3 Replies


P: n/a
"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

P: n/a
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

P: n/a
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.