_deXter Posted May 22, 2008 Report Share Posted May 22, 2008 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 More sharing options...
pcaldeira Posted May 22, 2008 Report Share Posted May 22, 2008 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 More sharing options...
_deXter Posted May 22, 2008 Author Report Share Posted May 22, 2008 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 More sharing options...
skm Posted May 23, 2008 Report Share Posted May 23, 2008 Podes fazer desta maneira bool Compare::operator <(teste x, teste y) { return x.num < y.num; } "There are two kinds of programmers. Those who write something to get the work done and those who want to write good code."João BrandãoWebsite e blog: http://jamab.blogspot.com/ Link to comment Share on other sites More sharing options...
_deXter Posted May 23, 2008 Author Report Share Posted May 23, 2008 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 More sharing options...
mogers Posted May 23, 2008 Report Share Posted May 23, 2008 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 More sharing options...
_deXter Posted May 24, 2008 Author Report Share Posted May 24, 2008 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 More sharing options...
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