|
| 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
| |
|
|