Jump to content

Overloading do operador < com estruturas


_deXter
 Share

Recommended Posts

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.

Link to comment
Share on other 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.

Link to comment
Share on other 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. 😛

Link to comment
Share on other 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 👍 ) fiz um insert na list<estrutura> com um pequeno ciclo e a utilização do <.

Obrigado. 🙂

Link to comment
Share on other sites

Andas a ler mal o enunciado do trabalho 👍

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

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

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Andas a ler mal o enunciado do trabalho 😄

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

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

Realmente... O problema foi não ter relido o enunciado.. 😛

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

Obrigado.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.