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

_deXter

Overloading do operador < com estruturas

7 mensagens neste tópico

Boas,

Pessoal, precisava de uma ajuda. Eu tenho uma estrutura com um int e um char, e tenho uma lista de elementos à qual quero aplicar a função sort.

Sei que preciso de fazer overloading do operador <, mas não sei como fazê-lo. Alguém me pode dar umas dicas?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisas de fazer overload desse operador, podes antes fornecer à função sort uma função de comparação que defina a ordem que queres.

Por exemplo:

#include <stdio.h>
#include <algorithm>
using namespace std;

struct teste
{
int num;
char letra;
};

bool compare(teste x, teste y) //ordenar por numero
{
return x.num < y.num;
}

teste estruturas[3];

int main()
{
int i;
estruturas[0].num=3;
estruturas[0].letra='g';
estruturas[1].num=1;
estruturas[1].letra='a';
estruturas[2].num=2;
estruturas[2].letra='z';
for(i=0; i<3; i++)
	printf("%d %c\n", estruturas[i].num, estruturas[i].letra);
putchar('\n');
sort(estruturas, estruturas+3, compare);
for(i=0; i<3; i++)
	printf("%d %c\n", estruturas[i].num, estruturas[i].letra); 
return 0;
}

Isto dá um output:

3 g
1 a
2 z

1 a
2 z
3 g

Ou seja, ordena as estruturas pelo valor do número. Eu prefiro usar uma função separada deste tipo em vez de overload do <, acho mais prático e sintacticamente mais fácil, mas acaba por funcionar da mesma maneira.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, o problema é que preciso mesmo de fazer overloading porque é pedido. lol

O problema é que não estou a conseguir sequer perceber como funciona... Tu aí utilizaste um array, não sei até que ponto a utilização é a mesma do que com lists.

Se alguém souber um tutorial bom... :)

De qualquer forma, muito obrigado. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer desta maneira


bool Compare::operator <(teste x, teste y)
{
            return x.num < y.num;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum..

Acabei por fazer isto de outra maneira. lol

Coloquei o overloading do < dentro da struct e depois em vez de utilizar o sort (afinal nao era obrigado a usar o sort :thumbsup:) fiz um insert na list<estrutura> com um pequeno ciclo e a utilização do <.

Obrigado. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Andas a ler mal o enunciado do trabalho :thumbsup:

Neste caso usar o sort era pior. Era suposto fazer esse "pequeno ciclo" :)

Quanto ao operador, podias ter perguntado na aula :P  Força nisso

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Andas a ler mal o enunciado do trabalho :D

Neste caso usar o sort era pior. Era suposto fazer esse "pequeno ciclo" :D

Quanto ao operador, podias ter perguntado na aula :D  Força nisso

Realmente... O problema foi não ter relido o enunciado.. :P

Pois, o meu trabalho é que estava atrasado e ainda não tinha chegado à parte da Pontuacao quando tive aula. Lol :P

Obrigado.

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