2012-06-18 5 views
6

Estoy haciendo un cálculo iterativo en una red de flujo durante el cual necesito registrar cuánto contribuye cada fuente al flujo en cada borde. El flujo en cualquier borde se debe al 2% de las fuentes en promedio, así que defino vector< map<int, double> > flow, donde flow[e][s] = f significa que el flujo en el borde e debido a la fuente s es f. En cada iteración, cada f en flow se actualiza.Estructura de datos de memoria externa para reemplazar el vector de mapas

El uso máximo de la memoria del programa se acerca a los 4 GB. Esto funciona en (32 bits) Linux y OS X, pero se bloquea en Windows (que parece imponer un 2 GB per process limit).

¿Cómo puedo implementar una estructura de datos basada en disco con una interfaz vector< map<int, double> > (o solucionar este problema)?

Respuesta

2

He usado STXXL para el tipo de escenario similar. Vale la pena investigarlo.

0

Si el vector de mapas es lo que consume toda la memoria, ¿es absolutamente necesario tener double para los campos de datos? Cambiar podría ayudar.

De lo contrario, es posible que pueda utilizar un memory map, aunque hacerlo compatible con varias plataformas será un poco laborioso, especialmente con la estructura de datos integrada que tiene para sus asignaciones.

Cuestiones relacionadas