¿Cuál es la diferencia con respecto a la asignación de memoria y la eficiencia entre el uso de una estructura con dos campos y un par?¿Cuál es la diferencia entre usar una estructura con dos campos y un par?
Respuesta
std::pair
proporciona constructores escritos previamente y operadores de comparación. Esto también les permite ser almacenados en contenedores como std :: map sin que usted tenga que escribir, por ejemplo, el constructor de copia o el orden débil estricto a través de operator <
(como requiere std::map
). Si no los escribe, no puede cometer un error (¿recuerda cuán estricto funciona el orden débil?) Así que es más confiable simplemente usar std::pair
.
En términos de asignación de memoria y eficiencia, no hay diferencia, ya que eso es exactamente lo que es std::pair
.
Eso es lo que responde a lo que me preguntaba, de repente me di cuenta de que la eficiencia realmente depende de lo que harías, así que es demasiada información. Voy a aceptar la pregunta de AshleysBrain para seguir pensando ... –
No hay problema, pero hubiera tenido más sentido preguntar sobre la comparación de la facilidad de uso si eso es lo que le interesa. Naveen y yo respondimos la pregunta como se dijo. (No se queja, solo dice ...) –
Hmm, parece que cometí un error grave en mi comentario. "Esa es la respuesta que me preguntaba" debería haber sido. Le di a AshleysBrain la respuesta aceptada ya que él fue rápido y dio una buena respuesta, igual que tú. Fue difícil elegir, pero fui por el que se beneficiaría más. –
No hay diferencia en términos de asignación de memoria o eficiencia. De hecho, en la implementación de STL estoy usando el par se define como struct pair
¿Qué implementación de STL estás usando? –
Estoy usando el que viene con el compilador VC9. – Naveen
Sí, esto se adhiere a la convención común de que si un tipo definido por el usuario expone miembros de datos públicos (como 'pair' does with' first' y 'second') entonces tiene que ser una' struct'. – Manuel
std::pair
aparece con una serie de constructores y operadores.
A struct
permiten campos con nombre (que no sean first
y second
) y está listo para ampliarse en cualquier momento.
Si es posible, prefiera un struct
, puede implicar algunos gastos generales, pero es definitivamente más fácil para el mantenimiento.
+1 para el comentario de mantenimiento. Trabajé con un grupo de ingenieros de NJ que intentaron hacer todo (y me refiero a todo) con el STL, y en lugar de crear clases/estructuras apropiadas cuando el diseño lo indicó, usaron un contenedor STL. El código estaba lleno de "if (route.first.second [* iter] .first) {...}". ¡Uf! –
Buena idea, lo tendremos en cuenta para más adelante. –
Como se indica en std::pair<int, int> vs struct with two int's, una estructura probablemente sea un poco más rápida porque no se realiza ninguna inicialización.
- 1. ¿Cuál es la diferencia entre declarar y definir una estructura?
- 2. ¿Cuál es la diferencia entre esos dos?
- 3. ¿Cuál es la diferencia entre usar MD5.Create y MD5CryptoServiceProvider?
- 4. SML: ¿Cuál es la diferencia entre usar abstype y usar una firma para ocultar la implementación de una estructura?
- 5. ¿Cuál es la diferencia entre un diccionario y una matriz?
- 6. ¿Cuál es la diferencia entre una mónada y un cierre?
- 7. ¿Cuál es la diferencia entre una matriz y un objeto?
- 8. Diferencia entre -> y. en una estructura?
- 9. ¿cuál es la diferencia entre la estructura estática y la estructura normal?
- 10. ¿Cuál es la diferencia entre un "contenedor" y una "estructura de datos"?
- 11. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 12. Cuál es la diferencia entre $ (...) y `...`
- 13. ¿Cuál es la diferencia entre dict() y {}?
- 14. Cuál es la diferencia entre = y: =
- 15. ¿Cuál es la diferencia entre el par de funciones floor()/ceil() y min()/max()?
- 16. En Scala, ¿cuál es la diferencia entre usar `_` y usar un identificador con nombre?
- 17. ¿Cuál es la diferencia entre ".equals" y "=="?
- 18. ¿Cuál es la diferencia entre separar un Fragmento y eliminarlo?
- 19. ¿Cuál es la diferencia entre un hilo y una fibra?
- 20. ¿Cuál es la diferencia entre un algoritmo y una función?
- 21. ¿Cuál es la diferencia entre una instancia y un objeto?
- 22. ¿Cuál es la diferencia entre un tema y una plantilla?
- 23. ¿Cuál es la diferencia entre un RoutedCommand y una RoutedUICommand?
- 24. ¿Cuál es la diferencia entre un método y una función?
- 25. ¿Cuál es la diferencia entre una heurística y un algoritmo?
- 26. ¿cuál es la diferencia entre UNIQUE INDEX y UNIQUE KEY?
- 27. ¿Cuál es la diferencia entre un nanokernel y un exokernel?
- 28. ¿Cuál es la diferencia entre usar WorkflowInvoker y WorkflowApplication?
- 29. ¿cuál es la diferencia entre -C y gzipping un mysqldump?
- 30. ¿Cuál es la diferencia entre un árbol y un directorio?
No creo que std :: pair proporcione constructores u operadores para sus miembros. ¿En qué estás pensando exactamente? – Manuel
@ Manuel, en realidad acabo de comprobar y, por supuesto, 'pair' proporciona un ctor predeterminado, y una copia de plantilla ctor. Tiene sentido: de esta forma, en cada caso, 'pair' permite llamarlo si & solo si los tipos subyacentes lo permiten. –
Sí, pero el OP parecía estar implicando que std :: pair * mágicamente * generó esos miembros para los tipos subyacentes. Es extraño que esta respuesta sea la que fue aceptada. – Manuel