2010-04-22 20 views
6

Me pregunto si alguno de ustedes conoce un tipo de contenedor asociativo de C++ en el que puedo realizar múltiples búsquedas de claves. El mapa debe tener búsquedas de tiempo constante, pero no me importa si está ordenado o desordenado. Solo necesita ser rápido.Mapa de claves múltiples en C++

Por ejemplo, quiero almacenar un grupo de objetos std :: vector en un mapa con un número entero y un vacío * como claves de búsqueda. Tanto el int como el vacío * deben coincidir para que se recupere mi vector. ¿Ya existe algo como esto? O voy a tener que hacer mi propio. Si es así, ¿alguna sugerencia? He intentado almacenar un boost :: unordered_map dentro de otro boost :: unordered_map, pero todavía no he tenido éxito con este método. Tal vez continúe Pershing este método si no hay una manera más simple. ¡Gracias!

Respuesta

4

La búsqueda constante requiere un mapa hash. Puede usar un boost::unordered_map (o tr1). La clave sería combined hash del int y el puntero void.

+0

Esto es exactamente lo que estaba buscando. ¡Gracias! – Morgan

0

Puede usar boost::multi_index.

(aunque creo que lo que realmente quiere es usar un tipo que contenga el vacío * y el entero como la clave de su mapa, y solo para comparar los datos brutos de ambos para proporcionar el operador de comparación para el mapa)

2

Si no quiere utilizar boost, puede probar map< int, map<void*, vector> >. Sin embargo, las búsquedas son O (log (tamaño del mapa)).

Cuestiones relacionadas