I've been switching my code over from std::map
to std::unordered_map
where appropriate. With std::map
, I typically write the following just to make sure the key cannot be modified:
std::map<const std::string, int>
Frankly, I never checked if this const
was of any value. This has always compiled and worked with g++.
Now, with std::unordered_map
, the following fails to link with g++ 4.5.1.
std::unordered_map<const std::string, std::string> m;
m["foo"] = "bar";
with this link error:
Undefined symbols:
"std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const"
, referenced from:
The fix is simple, to remove const
, but besides that, is there even a point in STL with any of the associative container classes to use a const
key type? Are there no methods that let you get a reference to the key for any associative container?