Hola, estoy implementando un algoritmo sobre grafos de talla muy grande, alrededor de varios millones de aristas (p. ej. 5*10^6). Un grafo viene representado en un fichero de texto donde las aristas se representan en la forma:
"cadena_origen"|"cadena_destino"|entero
siendo "cadena_origen" y "cadena_destino" el nombre de los nodos inicial y final de la arista (dichos nombres pueden contener caracteres, espacios y numeros). entero es el peso de la arista. Actualmente leo estas aristas de la siguiente manera:
while (fd.getline(cad, TAM)) {
istringstream fichlin(cad);
fichlin.getline(node1, TAM, '|');
fichlin.getline(node2, TAM, '|');
fichlin >> Peso;
//procesar node1, node2 y Peso...
}
El problema es que tarda demasiado, alrededor de 30 s. en mi máquina, la ejecución de este bucle, con lo cual la entrada misma de los datos del problema supone más tiempo que la aplicación del algoritmo posterior.
Me gustaría saber si hay alguna forma más eficiente de hacer esta misma operación de lectura de cadenas, ya sea en C o en C++ y aunque conlleve una pérdida de claridad, con la que poder reducir el tiempo de ejecución del programa.
Muchísimas gracias a todos de antemano!
Un saludo
----------------------------------------------------