_deXter Posted May 22, 2008 at 10:28 PM Report Share #186827 Posted May 22, 2008 at 10:28 PM 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 at 10:50 PM Report Share #186828 Posted May 22, 2008 at 10:50 PM 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 at 11:18 PM Author Report Share #186832 Posted May 22, 2008 at 11:18 PM 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 at 09:44 AM Report Share #186878 Posted May 23, 2008 at 09:44 AM 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 at 07:00 PM Author Report Share #186965 Posted May 23, 2008 at 07:00 PM 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 at 07:42 PM Report Share #186974 Posted May 23, 2008 at 07:42 PM 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 at 07:13 PM Author Report Share #187241 Posted May 24, 2008 at 07:13 PM 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