Clint Posted August 5, 2009 at 11:50 PM Report #282347 Posted August 5, 2009 at 11:50 PM Saudações. O meu problema é o seguinte, tendo: struct Rec { char nome[51]; int idade; }; vector<Rec> registo; Quero criar um vector de 10 registos, e aceder aos campos 'nome' e 'idade': registo.resize(10); for (int i = 0; i < 10; i++) { registo[ i ].nome = ... registo[ i ].idade = ... } Mas não consigo fazer isso. Como vou conseguir aceder aos campos 'nome' e 'idade' deste vector de estruturas? Alguém me pode ajudar? Peace.
TheDark Posted August 6, 2009 at 01:15 AM Report #282355 Posted August 6, 2009 at 01:15 AM Ao utilizares o método resize, não estás a criar 10 estruturas no vector. Estás apenas a garantir que consegues inserir 10 estruturas sem operações de realocação de memória. O que tens que fazer é criar um objecto do tipo Rec, alterar-lhe os valores, fazer push_back do mesmo: vector<Rec> registos; ... Rec registo_temp; for (int i = 0; i < 10; i++) { strcpy(registo_temp.nome, "Manel"); registo_temp.idade = i*8; registos.push_back(registo_temp); } Já agora, porque não usar string em vez de char[]? Desaparecido.
Clint Posted August 6, 2009 at 04:32 PM Author Report #282427 Posted August 6, 2009 at 04:32 PM Obrigado. 🙂 Utilizo o char[] porque criei um algoritmo que tira os acentos aos caracteres, neste caso às letras, e que só funciona com o char[]. Já agora outra pergunta: Como poderei ordenar alfabéticamente este vector? Já tentei utilizar o qsort(), mas parece que só dá para os arrays, não funciona para os vectores. Terei que fazer eu próprio o algoritmo?
zecapistolas Posted August 6, 2009 at 04:55 PM Report #282429 Posted August 6, 2009 at 04:55 PM Já agora outra pergunta: Como poderei ordenar alfabéticamente este vector? Já tentei utilizar o qsort(), mas parece que só dá para os arrays, não funciona para os vectores. Terei que fazer eu próprio o algoritmo? Podes utilizar o sort(vector.inicio, vector.fim) ou sort(vector.inicio, vector.fim, função de comparação).... Por exemplo: vector<int> myvector; myvector.push_back(15); myvector.push_back(19); myvector.push_back(5); myvector.push_back(2); myvector.push_back(20); sort (myvector.begin(), myvector.begin()); ou então: bool myfunction (int i,int j) { return (i<j); } sort (myvector.begin(), myvector.end(), myfunction); É só questão de fazeres a função de comparação....
Clint Posted August 6, 2009 at 09:09 PM Author Report #282460 Posted August 6, 2009 at 09:09 PM Podes utilizar o sort(vector.inicio, vector.fim) ou sort(vector.inicio, vector.fim, função de comparação).... Por exemplo: vector<int> myvector; myvector.push_back(15); myvector.push_back(19); myvector.push_back(5); myvector.push_back(2); myvector.push_back(20); sort (myvector.begin(), myvector.begin()); ou então: bool myfunction (int i,int j) { return (i<j); } sort (myvector.begin(), myvector.end(), myfunction); É só questão de fazeres a função de comparação.... Infelizmente parece que o sort() não funciona com vectores de estruturas (dá mensagem de erro nesse sentido), pelo menos eu não consigo fazer isso. De qualquer forma descobri uma maneira de contornar o problema: utilizo o qsort() num array e passo o array para o vector. De qualquer maneira, obrigado. 🙂
Clint Posted August 6, 2009 at 11:34 PM Author Report #282485 Posted August 6, 2009 at 11:34 PM Infelizmente parece que o sort() não funciona com vectores de estruturas (dá mensagem de erro nesse sentido), pelo menos eu não consigo fazer isso. De qualquer forma descobri uma maneira de contornar o problema: utilizo o qsort() num array e passo o array para o vector. De qualquer maneira, obrigado. 😄 😄 Afinal o qsort() pode ser usado em vectores de estruturas: É esta a sintaxe correcta: qsort((void*)®isto[0], 10, sizeof(Rec), myfunction); 🙂
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now