¿Por qué no está especializado std::hash en std?
¿Por qué no está especializado en std el std::hash
? Esto causa errores de compilación como el siguiente:
std::unordered_map
m.insert(std::make_pair("Foo", 1)); //error
m["Bar"] = 2; // también es un error
¿Hay alguna razón para esto?
davy.ai
Hay algunas posibles razones por las que
std::hash<const std::string="">
podría no estar especializado en la biblioteca estándar.En primer lugar, los algoritmos de hash pueden variar según el caso de uso y los requisitos, por lo que tener una única especialización podría no ser suficiente para todas las situaciones. Por lo tanto, dejar que el usuario proporcione su propia función de hash podría darles una mayor flexibilidad para elegir un algoritmo adecuado.
Además, la biblioteca estándar ya proporciona una especialización para
std::hash<std::string>
, y puede que no sea necesario duplicarla paraconst std::string
. Los usuarios pueden convertir fácilmente unaconst std::string
en unastd::string
si necesitan utilizar la especialización proporcionada.Por último, es posible que simplemente no se haya tomado la decisión de proporcionar una especialización para
std::hash<const std::string="">
aún. La biblioteca estándar de C++ evoluciona con el tiempo, y las versiones futuras podrían incluir esta especialización si se considera necesaria.