Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ayuda manejo contenedores STL

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ayuda manejo contenedores STL Responder citando

Hola que tal a todos en el foro. Estoy tratando de crear una lista con varios documentos usando la STL, pero no doy con la mejor forma de hacerlo. Les comento a mas detalle el problema.

1.- Tengo N documentos de Texto en disco duro
2.- Los cargo en un string y elimino caracteres especiales como .-?¿()/&%$# etc.
3.- Descarto Stopwords.
4.- Tokenizo y Lematizo.
5.- Finalmente tengo una lista con las palabras que sirven del documeto y lematizadas.

Para el paso 5 uso un:

Código:
multimap <string, int> ListDoc;


Pues bien aqui entra mi duda y les explico el porque:

Ya que tengo el ListDoc lleno, ese multimap representa el archivo 1. Ahora debo hacer el mismo proceso para el archivo 2, 3, 4, N. Pero manteniendo los anteriores en memoria. Para ello se me ocurrio meter el multimap en un:

Código:
list < multimap <string, int> > GeneralList;


Es decir lo que pretendo es que el elemento 1 del list tenga todas las palabras del archivo 1 pero como si fuese un objeto. El elemento 2 que tenga las palabras del archivo 2, el elemento 3 de la lista las palabras del archivo 3 y asi sucesivamente. De manera que los elementos se vean mas o menos asi:


GeneralList
|
|
|------- archivo 1 como multimap
|
|
|------- archivo 2 como multimap
|
|
|------- archivo N como multimap


Mi duda surge al manejar el iterador del list, pues cuando declaro un iterador asi:

Código:
list < multimap <string, int> > :: iterator it;


E intento acceder a los elementos del multimap no puedo.

Para acceder debo crear un iterador a un multimap e asignarle el iterador del list algo asi:

Código:
it = ListDoc.begin(); // Accedo al primer multimap (el del archivo 1)
multimap <string,int> :: iterator  mt = it.operator *();


Entonces asi si ya puedo acceder a los elementos del pair para cada archivo.

Código:
cout  <<  (mt*).first;
cout  <<  (mt*).second;


Mi pregunta es:

¿Existe alguna forma mas practica y mejor de hacer esto?
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

El iterador al multimap lo necesitas para poder recorrer el contenido de cada uno de ellos en la lista. No se si te servirá de algo este pequeño ejemplo, pero es más o menos como tu lo estás haciendo:
Código:
typedef multimap<string, int> TListDoc;
typedef list<TListDoc> TGeneralList;

TListDoc ListDoc;
TGeneralList GeneralList;

// Primera lista
ListDoc.insert(make_pair("pruebaA", 1));
ListDoc.insert(make_pair("otroA", 2));
ListDoc.insert(make_pair("pruebaA", 9));
GeneralList.push_back(ListDoc);

// Segunda lista
ListDoc.clear();
ListDoc.insert(make_pair("pruebaB", 11));
ListDoc.insert(make_pair("otroB", 22));
ListDoc.insert(make_pair("pruebaB", 99));
GeneralList.push_back(ListDoc);

TGeneralList::iterator it;
for (it = GeneralList.begin(); it != GeneralList.end(); ++it)
{
    cout << "---" << endl;
    for (TListDoc::iterator mt = it->begin(); mt != it->end(); ++mt)
        cout << mt->first << " : " << mt->second << endl;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias _Leo por tu ejemplo. Y pues si efectivamente, la forma que presentas es muy similar a como lo hago. Lo que tenía duda es si el proceso se podía optimizar con algún otro contenedor y el acceso a los elementos se podría hacer sin usar un 2do iterador. De nuevo gracias por responder.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.