Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » array schneller sortieren - qsort?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.09.2003, 17:13 Uhr
~cuara
Gast


Hallo zusammen,

ich habe ein Array, der so aussieht:


C++:

    struct Array
    {
        float f;
        int a;
        int b;
        int c;
    };
    CArray<Array, Array> m_arArray;



Ich muss das Array nach dem ersten Element, also float, sortieren. Mit Bubble oder Insertion Sort klappt es zwar, aber da mein Array bis zu 500000 Datensätze hat, dauert es vieeeel zu lange.

Ich möchte es mit qsort versuchen, komme aber mit den code nicht klar. Das habe ich bis jetzt:


C++:

int compare(const void *p1, const void *p2)
{
    int i = *((float *)p1);
    int j = *((float *)p2);

    if (m_arArray.ElementAt(i).f > m_arArray.ElementAt(j).f)
     return (1);
    if (m_arArray.ElementAt(j).f < m_arArray.ElementAt(j).f)
     return (-1);
    return (0);
}


und:

C++:

    size_t nelems = m_arSimArray.GetSize() / sizeof (float);

    qsort((void *)m_arSimArray, nelems, sizeof (float), compare);  



mit folgender Fehlermeldung:
error C2440: 'type cast' : cannot convert from 'class CArray<struct Array,struct Array>' to 'void *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Hilfe!!

Viele Grüße,
cuara.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.09.2003, 17:46 Uhr
virtual
Sexiest Bit alive
(Operator)


Nee, qsort darfst Du so auch nicht anwenden, es ist für C Style Arrays gedacht.
Du hast mit CArray eine Klasse benutzt, die wahrscheinlich von der MFC kommt. Entweder die MFC stellt dir eine Sortierroutine bereit, oder du solltest auf std::vector umsteigen und dann mit den STL - Sort routinen arbeiten.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.09.2003, 17:54 Uhr
~cuara
Gast


okay, danke.. ich lese erstmal darüber nach..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.09.2003, 18:02 Uhr
0xdeadbeef
Gott
(Operator)


Das sähe dann z.B. so aus:

C++:
#include <vector>
#include <algorithm>

struct data
{
    float f;
    int a, b, c;
};

bool operator<(const data& d1, const data &d2) { return d1.a < d2.a; }

std::vector<data> my_vector;
//...
std::sort(my_vector.begin(), my_vector.end());


Ne gute STL-Referenz gibts hier: www.gnuenterprise.org/doc/stl-manual/html/
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.09.2003 um 18:03 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.09.2003, 09:57 Uhr
~cuara
Gast


Hallo 0xdeadbeef, virtual und alle...

Ich habe das jetzt so eingebaut, und zwar mit my_vector = m_arArray. Es erscheint zwar bei der Sortierung keine Kompilierfehler mehr , dafür aber danach, und zwar an jeder Stelle, wo m_arArray.ElementAt(x).xxxx vorkommt....

und zwar folgende:
'm_arArray' : is not a member of 'CArray<struct Array,struct Array>'

Wie sollte ich dann die Werte im 'm_arArray' weiterhin aufrufen können?

Danke danke danke!

cuara

[quote]0xdeadbeef postete
[i]Das sähe dann z.B. so aus:

C++:
#include <vector>
#include <algorithm>

struct data
{
    float f;
    int a, b, c;
};

bool operator<(const data& d1, const data &d2) { return d1.a < d2.a; }

std::vector<data> my_vector;
//...
std::sort(my_vector.begin(), my_vector.end());

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: