Re: std::map<>::operator[] const
On Mon, 21 Apr 2008 02:53:09 +0200, Mickaël Wolff
<mickael.wolff@laposte.net>:
> Non, j'ai essayé. il n'y a pas de map::find const
Bien sûr que si, heureusement !
Tu dois même pouvoir écrire quelque chose comme ça :
template <class Cle, class Valeur, class Less>
Valeur GetDansMap (std::map <Cle, Valeur, Less> const& map_,
Cle const& cle, Valeur const& valeur_par_defaut= Valeur())
{
typename std::map <Cle, Valeur, Less>::const_iterator
it= map_.find (cle);
if (it == map_.end())
{
return valeur_par_defaut;
}
else
{
return (*it).second;
}
}
ou bien :
template <class Cle, class Valeur, class Less>
Valeur GetDansMap (std::map <Cle, Valeur, Less> const& map_,
Cle const& cle)
{
typename std::map <Cle, Valeur, Less>::const_iterator
it= map_.find (cle);
if (it == map_.end())
{
throw quelque_chose;
}
else
{
return (*it).second;
}
}
Tu peux aussi écrire ton propre map :
template <class Cle, class Valeur> class MonMap
{
public:
void Set (Cle const& cle, Valeur const& valeur)
{ data[cle]= valeur; }
Valeur const& Get (Cle const& cle) const
{
Data::const_iterator it= data.find (cle);
if (it == data.end())
{
throw quelque_chose;
}
return (*it).second;
}
Valeur const& operator[] (Cle const& cle) const
{ return Get(cle); }
private:
typedef typename std::map<Cle,Valeur> Data;
Data data;
};
|