Me gustaría agregar otra razón para no hacer esto. Si está utilizando punteros de esta manera, y si tiene un error que depende del orden de los elementos de un contenedor, entonces será muy difícil de encontrar. Incluso si su programa parece ser completamente determinista, no lo será. El orden de los elementos en un contenedor depende del algoritmo que utiliza el asignador de memoria, que está completamente fuera de tu control. Si ejecuta el mismo ejemplo varias veces sin reiniciar su programa, algunos pueden fallar y otros pueden tener éxito.
Esta es la voz de la experiencia amarga. Hice esto con un proyecto de depuración una vez, donde tenía contenedores llenos de símbolos de C++. Cuando necesité ordenar los símbolos, terminé con símbolos que son diferentes, pero que tienen el mismo nombre (piensa en funciones sobrecargadas) y que eran idénticos en todo lo demás. Entonces, en este caso los comparé como último recurso con la dirección del objeto de símbolo. Me encontré con varios errores que aparentemente no eran deterministas, donde el no determinismo era causado solo por este fenómeno. A veces se necesitaron más de 10 o 15 intentos para reproducir los problemas. Eventualmente tomé el tiempo para eliminar la clasificación por direcciones, y eso me ahorró muchos problemas a largo plazo.
Dicho esto, no diré que no he hecho esto recientemente. Pero cada vez que lo hago, siento que es un error.
Por cierto, ¿quieres usar las direcciones como clave o el valor de las cosas que señalan como clave? En este último caso, deberá proporcionar un comparador personalizado – sellibitze
relacionado: [verificando si el puntero apunta dentro de una matriz] (http://stackoverflow.com/questions/4657976/) – fredoverflow