/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Sortering af strenge i array af strukturer~
Fra : Henrik


Dato : 11-06-04 08:42

Hej,

Jeg har følgende struktur:
{
char szTest[10]
DWORD dwItem;
+ lidt mere
}

som jeg har et array af.

Nu ønsker jeg at sortere array'et af strukturer efter szTest.

Hvordan kan jeg gøre dette lettest ?.
(Det er iorden at overskrive mit array af strukturer (anvende det som
output) (naturligvis blot at data forbliver samlet i den enkelte struktur).
Det er i VS 6.0 og jeg anvender MFC.

Henrik.



 
 
Jonas Meyer (11-06-2004)
Kommentar
Fra : Jonas Meyer


Dato : 11-06-04 09:40

Hej Henrik

Henrik wrote:
> Hej,
>
> Jeg har følgende struktur:
> {
> char szTest[10]
> DWORD dwItem;
> + lidt mere
> }
>
> som jeg har et array af.
>
> Nu ønsker jeg at sortere array'et af strukturer efter szTest.


Du kan definere en sammelignings relation, for din struktur (her antager
jeg den hedder S), og i den blot kalde den funktion du vil bruge til at
sammenligne:

struct CompareS
{
   bool operator()( const s& l, const s& r )
   {
      return strcmp( l.szTest, r.szTest ) < 0;
   }
};

og så bruger du bare std::sort, fra <algorithm>

std::sort( array, array + size, CompareS() );


mvh Jonas

Igor V. Rafienko (11-06-2004)
Kommentar
Fra : Igor V. Rafienko


Dato : 11-06-04 21:59

[ Jonas Meyer ]

[ ... ]

> Du kan definere en sammelignings relation, for din struktur (her antager
> jeg den hedder S), og i den blot kalde den funktion du vil bruge til at
> sammenligne:


Hvorfor vil du lage en struct?

[ ... ]





ivr
--
<html><form><input type crash></form></html>

Jonas Meyer (14-06-2004)
Kommentar
Fra : Jonas Meyer


Dato : 14-06-04 00:13

Hejsa -

Igor V. Rafienko wrote:
> [ Jonas Meyer ]
>
> [ ... ]
>
>
>>Du kan definere en sammelignings relation, for din struktur (her antager
>>jeg den hedder S), og i den blot kalde den funktion du vil bruge til at
>>sammenligne:
>
>
>
> Hvorfor vil du lage en struct?

Øhm, ja, det kunne vel ligeså godt være en funktion - Det er nok en vane
jeg har pålagt mig, sådan jeg kan bruge samme operator til sortering og
til ordningsrelationer i map og set - der kan man svjv ikke bruge
funktioner, men er nødt til at lave en struktur/klasse.

mvh Jonas

Henrik (14-06-2004)
Kommentar
Fra : Henrik


Dato : 14-06-04 13:52

Hej,

Tak for jeres hjælp.

Jeg fandt følgende i MSDN: Q73853 "INFO: Sorting Structures with the C
qsort() Function"

Dette løser alle problemer. Bemærk at Compare callback funktionen skal være
udenfor klassen.

Henrik.

"Henrik" <hla@telenorconnect.com> wrote in message
news:cabnnt$1emt$1@news.cybercity.dk...
> Hej,
>
> Jeg har følgende struktur:
> {
> char szTest[10]
> DWORD dwItem;
> + lidt mere
> }
>
> som jeg har et array af.
>
> Nu ønsker jeg at sortere array'et af strukturer efter szTest.
>
> Hvordan kan jeg gøre dette lettest ?.
> (Det er iorden at overskrive mit array af strukturer (anvende det som
> output) (naturligvis blot at data forbliver samlet i den enkelte
struktur).
> Det er i VS 6.0 og jeg anvender MFC.
>
> Henrik.
>
>



Byrial Jensen (14-06-2004)
Kommentar
Fra : Byrial Jensen


Dato : 14-06-04 18:10

Henrik wrote:
> Hej,
>
> Tak for jeres hjælp.
>
> Jeg fandt følgende i MSDN: Q73853 "INFO: Sorting Structures with the C
> qsort() Function"

qsort() er løsningen i C-programmer. Hvis sorteringsnøglen er første
element i struct'en, kan man tilmed drage fordel af at C garanterer at
en struct har samme adresse som dens første element.

Men i C++ er std::sort() at foretrække på grund større typesikkerhed og
hurtigere udførelse fordi sammenligningsfunktionen kan inlines når
std::sort()-templatefunktionen instantieres.

Henrik (15-06-2004)
Kommentar
Fra : Henrik


Dato : 15-06-04 07:30

Hej,

Sorteringsnøglen behøver ikke være først element i structen !.
Qsort kenden ikke typen den sorterer på, så det er egentlig ligegyldigt om
det en et array af strenge, eller store strukturer.

Ang: std::sort() :
Som jeg forstod er std::sort en del af noget 'stl'. Og det ville jeg ikke
ind i.

Tak.

"Byrial Jensen" <bjensen@nospam.dk> wrote in message
news:40cddbdb$0$23868$14726298@news.sunsite.dk...
> Henrik wrote:
> > Hej,
> >
> > Tak for jeres hjælp.
> >
> > Jeg fandt følgende i MSDN: Q73853 "INFO: Sorting Structures with the C
> > qsort() Function"
>
> qsort() er løsningen i C-programmer. Hvis sorteringsnøglen er første
> element i struct'en, kan man tilmed drage fordel af at C garanterer at
> en struct har samme adresse som dens første element.
>
> Men i C++ er std::sort() at foretrække på grund større typesikkerhed og
> hurtigere udførelse fordi sammenligningsfunktionen kan inlines når
> std::sort()-templatefunktionen instantieres.



Jonas Meyer (15-06-2004)
Kommentar
Fra : Jonas Meyer


Dato : 15-06-04 11:47

Hejsa -

Henrik wrote:
> Hej,
>
> Sorteringsnøglen behøver ikke være først element i structen !.
> Qsort kenden ikke typen den sorterer på, så det er egentlig ligegyldigt om
> det en et array af strenge, eller store strukturer.

... det var vist heller ikke det der blev skrevet..

> Ang: std::sort() :
> Som jeg forstod er std::sort en del af noget 'stl'. Og det ville jeg ikke
> ind i.

Du har forstået forkert- Tilbage,6 år siden, passede dette, men da c++
blev standardiseret, blev det til en del af standardbiblioteket i sproget.

Du kan godt styre uden om det, men det vil være tåbeligt.
Der er masser af funktionalitet, som drastisk vil påvirke din
effektivitet, når du programmerer i c++.

mvh Jonas

Mogens Hansen (15-06-2004)
Kommentar
Fra : Mogens Hansen


Dato : 15-06-04 16:16

"Henrik" <hla@telenorconnect.com> wrote:

[8<8<8<]
> Ang: std::sort() :
> Som jeg forstod er std::sort en del af noget 'stl'. Og det ville jeg
> ikke ind i.

std::sort er en del af C++ Standard Library og er således en del af en
hvilken som helst C++ compiler der bare nogenlunde overholder C++
Standarden.
Det er helt analogt til at qsort er en del af standard biblioteket til C (og
iøvrigt C++ Standard Library).

Det er en historisk populær og upræcis forklaring at sige at "sort" er en
del af STL.
Den forklaring har primært relevans i forhold til C++ arkæologi (hvilket er
interessant nok). Det er ikke relevant for at kunne bruge "std::sort".

"std::sort" har _aldrig_ været en del af STL, fordi STL ikke brugte
namespace std

Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste