Credits: BS, OGC This is a basic program to demostrate the posibility of saving some strings and be retrieved their identifiers (ID). A pair of definitions that can be used to simplify Code: #define INDEXFIND_BY_ID * (((PrivateData*)my_data)->findByID) #define INDEXFIND_BY_NAME (((PrivateData*)my_data)->findByName) Code: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // UTN FRGP TSP // BS // mail: david_bs@live.com // web: Etalking.Com.Ar // 2012 // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <windows.h> #include <stdio.h> #include <fstream.h> #include <map> #include <string> #include <vector> using namespace std; typedef map<int,int> MapIntInt; struct PrivateData{ MapIntInt findByID; string findByName; }; void* my_data; #define INDEXFIND_BY_ID * (((PrivateData*)my_data)->findByID) #define INDEXFIND_BY_NAME (((PrivateData*)my_data)->findByName) struct Info { char szName[36]; int iId; }; vector<Info> infoList; void Constructor() { my_data = new PrivateData; } void Destructor() { * *delete (PrivateData*)my_data; } Code: void Completa(int id, const char* name){ Info newElemento; strcpy( newElemento.szName, name ); newElemento.iId = id; MapIntInt::iterator foundpos = (((PrivateData*)my_data)->findByID).find( newElemento.iId ); typedef MapIntInt::value_type Entry; if(foundpos==((((PrivateData*)my_data)->findByID).end())) { int index = infoList.size(); infoList.push_back(newElemento); (((PrivateData*)my_data)->findByID).insert(Entry(newElemento.iId,index)); (((PrivateData*)my_data)->findByName).assign(newElemento.szName); } else { int index = foundpos->second; infoList[index]=newElemento; } } Getting access to the names saved in the vector Code: const char* getNamebyId(int id) { MapIntInt::iterator foundpos = (((PrivateData*)my_data)->findByID).find( id ); if(foundpos==((((PrivateData*)my_data)->findByID).end())) { return "none"; } int index = foundpos->second; return infoList[index].szName; } Code: int main(){ Constructor(); Completa(0, "AK"); Completa(0, "SCOUT"); Completa(1, "AP"); Completa(2, "DESERT"); Completa(1, "M4"); Completa(1, "M4"); Completa(1, "M4"); cout << "La id 0 contiene: " << getNamebyId(0) << endl; cout << "La id 1 contiene: " << getNamebyId(1) << endl; cout << "La id 2 contiene: " << getNamebyId(2) << endl; cin.get(); Destructor(); return 0; }