• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Clint

Vector de estruturas

6 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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[]?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.  :D

:D Afinal o qsort() pode ser usado em vectores de estruturas:

É esta a sintaxe correcta:

qsort((void*)&registo[0], 10, sizeof(Rec), myfunction);

  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora