¿Cuál es la diferencia entre usar una estructura con dos campos y un par?


¿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?

Author: Soo Wei Tan, 2010-02-10

6 answers

std::pair proporciona constructores pre-escritos y operadores de comparación. Esto también permite que se almacenen en contenedores como std:: map sin necesidad de escribir, por ejemplo, el constructor de copia o el orden estricto débil a través de operator < (como lo requiere std::map). Si no los escribes, no puedes cometer un error (¿recuerdas cómo funciona el orden estricto y débil? por lo tanto, es más confiable usar std::pair.

 19
Author: AshleysBrain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-17 18:27:07

std::pair viene con una serie de constructores y operadores.

A struct permite campos con nombre (distintos de first y second) y está listo para ser extendido en cualquier momento.

Prefiera un struct cuando pueda. Puede implicar algunos gastos generales, pero es definitivamente más fácil para el mantenimiento.

 15
Author: Matthieu M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-01 09:41:34

En términos de asignación de memoria y eficiencia, no hay diferencia since ya que eso es exactamente lo que es un std::pair.

 5
Author: j_random_hacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-10 11:06:02

No hay diferencia en términos de asignación de memoria o eficiencia. De hecho, en la implementación de STL que estoy usando el par se define como struct pair

 1
Author: Naveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-10 11:06:27

Como esto no se menciona anteriormente, si desea los beneficios de su propio nombre, pero las ventajas de std::pair (o cualquier otro objeto), puede usar ( desde c++11 en adelante). Puede establecer esto en su espacio de nombres o declaración de clase.

using myPair = pair<int,string>;

Cf. Referencia de C++. para más documentación.

 0
Author: Konchog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-01 08:56:57

Como se indica en std::pair vs struct with two int's una estructura probablemente será un poco más rápida porque no se realiza ninguna inicialización.

 -1
Author: Basj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-30 11:35:21