2011-04-06 14 views
13

¿Cuál es la mejor manera de asignar dos valores a una clave?std :: correlacionar una clave, dos valores

es decir Un artículo con un valor y bool.

intentado usar:

std::map<std::string, std::pair<std::string, bool> > myMap2 

Pero eso no parece ser la solución correcta. ¿Hay una manera más elegante de hacer esto?

+7

'std :: pair <>' está bien. ¿Cuál es tu preocupación? – Keith

Respuesta

7

Esa es de hecho la solución correcta. De manera más general, considere usar std::tuple en lugar de std::pair para una interfaz uniforme independientemente del número de valores (como std::pair obviamente está restringido a dos), o boost::tuple si su compilador es demasiado antiguo para enviar con una implementación std:: o std::tr1::.

+0

tuple es ... gracias – JonnyCplusplus

+2

O una estructura, cuando su tupla comienza a salirse de control ... –

+1

@Steve: ... que será cuando la tupla contenga más de dos elementos. :) En serio, las tuplas promueven el código ilegible cuando sus contenidos no se tipean o estructuran de forma homogénea de alguna manera obvia. El código que dice 'iter-> second.get <6>()' es desagradable. –

6

O utilice std::pair<> como lo hizo o haga una estructura personalizada que contenga los valores que desea almacenar. Haría esto último en la mayoría de los casos, ya que los valores tienen nombres más descriptivos que first y second.

1

Normalmente, incluyo una simple structValue struct/class.

Cuestiones relacionadas