søger sorterings maskine

Tags:    c++

<< < 12 > >>
hej

jeg sidder med et lille, men relativ nemt problem. jeg søger efter en sorteringsmaskine der kan gå ind i en vektor, søge hele vektoren igennem, og hvis den finder 2 værdier der er ens så skal den slette den ene af værdierne. mit hoved program indlæser fra en txt fil. jeg tager så værdierne fra txt filen og putter ind i min vektor. det er så meningen jeg kan kalde funktionen (som kunne være en bool sort eller noget i den stil), hvorpå den så sortere den ene af de 2 værdier som optræder 2 gange, således at jeg kan udskrive tallene til en ny txt fil, hvor alle dobbeltværdierne er sorteret fra.



Kan du vel klare med nogle iteratorere og http://www.cplusplus.com/reference/algorithm/unique.html



Fold kodeboks ind/udKode 


hvis du skal bruge det til mere end du sagde ville jeg bruge en list i stedet, og da det ikke fremgik klart hvad værdier var bruger jeg functors, hvis <= og == er defineret for din værdi som f.eks. her ved in behøver du ikke bruge dem.



Indlæg senest redigeret d. 05.06.2008 22:13 af Bruger #5620
Fold kodeboks ind/udKode 


hvis du skal bruge det til mere end du sagde ville jeg bruge en list i stedet, og da det ikke fremgik klart hvad værdier var bruger jeg functors, hvis <= og == er defineret for din værdi som f.eks. her ved in behøver du ikke bruge dem.


jeg kan godt se det smarte i din metode. problemet er bare at den først sortere alle værdier efter voksende rækkefølge. det var desvære ikke det der var hensigten. det var meningen at når den udskrev, så udskrev den i den samme rækkefølge som værdierne stod i, i inddata filen, men bare med de værdier der optræder 2 gange sorteret fra. jeg har også prøvet at køre progammret, og der ser ud til at opstå mismacth til de inkorpereret h-files. min program ser således ud indtil videre:

Fold kodeboks ind/udKode 


jeg er klar over at mit program ikke fungere som det ser ud nu. hvis sorteringsfunktionen, kunne sortere alle de værdier der optræder 2 gange fra, samtidig med at den originale rækkefølge stadigvæk vedligeholdes, vil det være mest optimal.
min inddatafil ser for resten således ud:

Fold kodeboks ind/udKode 




Hmm, du risikerer at få mange gennemløb hvis du skal gå hele vektoren igennem for hver gang. Måske ville det bedste alternativ være at starte med at lave en kopi der holder styr på den oprindelige placering i vectoren:
Fold kodeboks ind/udKode 


Hvis du så modificerer nørdens Sort() og Comp() til a.val <= b.val, hhv a.val==b.val, og laver en Sort2() der returnerer a.order<=b.order, skulle du kunne køre algoritme og tilbagekopiere dine værdier til en retur-vektor.
Jeg ved ikke om det er den kønneste løsning, men jeg tror det ville du.



Indlæg senest redigeret d. 06.06.2008 14:34 af Bruger #8249
Hmm, du risikerer at få mange gennemløb hvis du skal gå hele vektoren igennem for hver gang. Måske ville det bedste alternativ være at starte med at lave en kopi der holder styr på den oprindelige placering i vectoren:
Fold kodeboks ind/udKode 


Hvis du så modificerer nørdens Sort() og Comp() til a.val <= b.val, hhv a.val==b.val, og laver en Sort2() der returnerer a.order<=b.order, skulle du kunne køre algoritme og tilbagekopiere dine værdier til en retur-vektor.
Jeg ved ikke om det er den kønneste løsning, men jeg tror det ville du.


en ting jeg ikke forstår er at når jeg prøver at udføre

sort(v.begin(),v.end(),Sort());

kommer den med følgende meddelse:

no match for call to '(Sort)(value&,value&)'

value er det jeg har valgt at kalde min struct. bagefter giver compileren mig en masse referencer til en h-file der hedder stl_algo.h. jeg har igen ide om hvorfor den giver mig den compile error. hvis der er nogen der ved hvorfor den siger, og ved hvordan man retter fejlen, ville jeg være meget glad for at vide det.



stl_algo.h er den include fil i din compiler hvor sort ligger, og bliver inkluderet i din kode når du skriver #include <algorithm> . Det er den fil computeren arbejder i når problemet opstår.
Hvis du har valgt at kalde din struct value skal du implementere din Sort() functor sådan:
Fold kodeboks ind/udKode 


Nu kommer jeg lidt på tynd is, for jeg ved ikke hvor mange gennemløb af din vektor std::sort() kræver. Men det kunne være at du kunne klare det hele mere effektivt på en anden måde (jeg har ikke kunnet tjekke koden på denne computer):
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 07.06.2008 09:19 af Bruger #8249
stl_algo.h er den include fil i din compiler hvor sort ligger, og bliver inkluderet i din kode når du skriver #include <algorithm> . Det er den fil computeren arbejder i når problemet opstår.
Hvis du har valgt at kalde din struct value skal du implementere din Sort() functor sådan:
Fold kodeboks ind/udKode 


Nu kommer jeg lidt på tynd is, for jeg ved ikke hvor mange gennemløb af din vektor std::sort() kræver. Men det kunne være at du kunne klare det hele mere effektivt på en anden måde (jeg har ikke kunnet tjekke koden på denne computer):
Fold kodeboks ind/udKode 


vil det ikke være nemmere at bruge searh, i stedet for sort. hvor du tager vektoren og sammenligner med et array. jeg ved hvilke værdier der går igen, så jeg kan vil bare putte dem inde i et array og sammenlign med vektoren. ligesom de har gjordt her:

http://www.cplusplus.com/reference/algorithm/search.html

når den så har fundet et macth kan den vil bare slette positionen eller udskrive fejl.



ligemeget. jeg har fundet en løsning på probelmet. tak for hjælpen.:D




vil det ikke være nemmere at bruge searh, i stedet for sort...
når den så har fundet et macth kan den vil bare slette positionen eller udskrive fejl.

Hej James,
det er det jeg har foreslået en kodestump til i min kodeboks nummer to ovenfor, hvor jeg bruger find() og undgår sort(). Jeg tror det er den mest effektive måde at gøre det på. Hvilken løsning endte du med?



Indlæg senest redigeret d. 07.06.2008 20:26 af Bruger #8249
hej

jeg sidder med et lille, men relativ nemt problem. jeg søger efter en sorteringsmaskine der kan gå ind i en vektor, søge hele vektoren igennem, og hvis den finder 2 værdier der er ens så skal den slette den ene af værdierne. mit hoved program indlæser fra en txt fil. jeg tager så værdierne fra txt filen og putter ind i min vektor. det er så meningen jeg kan kalde funktionen (som kunne være en bool sort eller noget i den stil), hvorpå den så sortere den ene af de 2 værdier som optræder 2 gange, således at jeg kan udskrive tallene til en ny txt fil, hvor alle dobbeltværdierne er sorteret fra.



Hvilken algoritme du skal vælge afhænger hvad du skal have sorteret. Der er stor forskel på sorteeringsalrogitmerne og deres tidskompleksitet. Nogle algoritmer er fx hurtigere til små mængder data (som boblesort), mens andre er hurtigere til store mængder data (som quicksort). Dette er blot to af mange sorteringsalgoritmer. Herudover skal du overveje nøje hvilken struktur du vælger at gemme dataene i. En std::vector er hurtig at søge igennem, men hvis der tages data ind og ud af den ofte, så vil den ikke være så hurtig.





Indlæg senest redigeret d. 08.06.2008 11:29 af Bruger #10448
<< < 12 > >>
t