C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Sortieren

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Marten Weber
Guest





PostPosted: Tue Nov 11, 2003 4:18 pm    Post subject: Sortieren Reply with quote



Hi !

Bekomme das Sortieren von Instanzen nicht so ganz auf die Reihe...

Code:
//************
//Klasse
class c_Elemente
.....
void c_Elemente::set_nr (long int xnr) {m_nr = xnr; }
void c_Elemente::set_e1 (long int e1c) {m_e[0] = e1c; }
void c_Elemente::set_e2 (long int e2c) {m_e[1] = e2c; }
void c_Elemente::set_e3 (long int e3c) {m_e[2] = e3c; }
void c_Elemente::set_e4 (long int e4c) {m_e[3] = e4c; }
void c_Elemente::set_nreeee (long int nrc,long int e1c, long int e2c,
long int e3c, long int e4c)
{
m_nr = nrc;
m_e[0] = e1c;
m_e[1] = e2c;
m_e[2] = e3c;
m_e[3] = e4c;
}
long int c_Elemente::get_nr() {return m_nr;}
long int c_Elemente::get_e1() {return m_e[0];}
long int c_Elemente::get_e2() {return m_e[1];}
long int c_Elemente::get_e3() {return m_e[2];}
long int c_Elemente::get_e4() {return m_e[3];}

//Konstruktor

c_Elemente::c_Elemente ()
{
m_nr=0; //***Mit 0 initialisieren
for (int i=0;i<=3;i++)
m_e[i]=0;
}
//Destruktor

c_Elemente::~c_Elemente()
{
}


};
//********************
//Globale Variable
std::vector
//**************************
//Prädikat für sort
int kleiner (c_Elemente& s,c_Elemente& t)
{
if (s.get_e1() < t.get_e1()) return 1;
//if ((s.get_e1()==t.get_e1())&&(s.get_e2() return 0;
}

// Begin Hauptprogramm

int main(int argc, char *argv[])
{
//Werte füllen
vecaa.resize(7);
vecaa[0].set_nreeee(0,0,0,0,0);
vecaa[1].set_nreeee(1,8,0,0,0);
vecaa[2].set_nreeee(2,1,1,1,0);
vecaa[3].set_nreeee(3,2,4,0,0);
vecaa[4].set_nreeee(4,2,2,0,0);
vecaa[5].set_nreeee(5,2,1,0,0);
vecaa[6].set_nreeee(5,5,3,0,0);

std::cout << "Unsortiert" << std::endl;
for (int i=0;i std::cout << "Nr.: "<< vecaa[i].get_nr() << ","<< vecaa[i].get_e1()
<<","<< vecaa[i].get_e2() << std::endl;

sort(vecaa.begin(),vecaa.end(),kleiner);

std::cout << "Sortiert" << std::endl;
for (int i=0;i std::cout << "Nr.: "<< vecaa[i].get_nr() << ","<< vecaa[i].get_e1()
<<","<< vecaa[i].get_e2() << std::endl;



system("PAUSE");
return 0;
}

Ist die Definition der Funktion kleiner so richtig ?

Compiler bricht mit folgender Meldung ab:

C:Dev-Cppincludec++bitsstl_algo.h
[Warning] In function `const _Tp&:
2147 C:Dev-Cppincludec++bitsstl_algo.h
instantiated from `void std::__introsort_loop(_RandomAccessIter,
_RandomAccessIter, _Size, _Compare) [with _RandomAccessIter =
__gnu_cxx::__normal_iterator std::allocator >, _Size = int, _Compare = int (*)(c_Elemente&,
c_Elemente&)]'
2209 C:Dev-Cppincludec++bitsstl_algo.h
instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter,
_Compare) [with _RandomAccessIter =
__gnu_cxx::__normal_iterator<c_Elemente*, std::vector std::allocator >, _Compare = int (*)(c_Elemente&,
c_Elemente&)]'

Das gleiche nicht mit Klassen sondern einem Struct funktioniert...
Hier der Code:




//**************************************************************************
****
// Globale Variabeln


typedef struct
{
long int nr;
long int e1;
long int e2;
} elem;

std::vector<elem> vecaa;

//**************************
int kleiner (const elem& s, const elem& t)
{
long int a;

if (s.e1 < t.e1) return 1;
if ((s.e1==t.e1)&&(s.e2 return 0;
}

void set (long int a, long int b, long int c)
{
vecaa[a].nr=a;
vecaa[a].e1=b;
vecaa[a].e2=c;
}

// Begin Hauptprogramm

int main(int argc, char *argv[])
{

vecaa.resize(6);
set(0,0,0);
set(1,1,1);
set(2,3,2);
set(3,3,1);
set(4,2,2);
set(5,2,1);

std::cout << "Unsortiert" << std::endl;
for (int i=0;i<=5;i++)
std::cout << "Nr.: "<< vecaa[i].nr << ","<< vecaa[i].e1
<<","<< vecaa[i].e2 << std::endl;

sort(vecaa.begin(),vecaa.end(),kleiner);


std::cout << "Sortiert" << std::endl;
for (int i=0;i<=5;i++)
std::cout << "Nr.: "<< vecaa[i].nr << ","<< vecaa[i].e1
<<","<< vecaa[i].e2 << std::endl;


system("PAUSE");
return 0;
}


Was mache ich falsch ?
Thx

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Albrecht Fritzsche
Guest





PostPosted: Tue Nov 11, 2003 4:55 pm    Post subject: Re: Sortieren Reply with quote



Marten Weber wrote:
Quote:
Hi !

Bekomme das Sortieren von Instanzen nicht so ganz auf die Reihe...

Code:
//************
//Klasse
class c_Elemente
....
void c_Elemente::set_nr (long int xnr) {m_nr = xnr; }
void c_Elemente::set_e1 (long int e1c) {m_e[0] = e1c; }
void c_Elemente::set_e2 (long int e2c) {m_e[1] = e2c; }
void c_Elemente::set_e3 (long int e3c) {m_e[2] = e3c; }
void c_Elemente::set_e4 (long int e4c) {m_e[3] = e4c; }
void c_Elemente::set_nreeee (long int nrc,long int e1c, long int e2c,
long int e3c, long int e4c)
{
m_nr = nrc;
m_e[0] = e1c;
m_e[1] = e2c;
m_e[2] = e3c;
m_e[3] = e4c;
}
long int c_Elemente::get_nr() {return m_nr;}
long int c_Elemente::get_e1() {return m_e[0];}
long int c_Elemente::get_e2() {return m_e[1];}
long int c_Elemente::get_e3() {return m_e[2];}
long int c_Elemente::get_e4() {return m_e[3];}

//Konstruktor

c_Elemente::c_Elemente ()
{
m_nr=0; //***Mit 0 initialisieren
for (int i=0;i<=3;i++)
m_e[i]=0;
}
//Destruktor

c_Elemente::~c_Elemente()
{
}


};
//********************
//Globale Variable
std::vector
//**************************
//Prädikat für sort
int kleiner (c_Elemente& s,c_Elemente& t)
{
if (s.get_e1() < t.get_e1()) return 1;
//if ((s.get_e1()==t.get_e1())&&(s.get_e2() return 0;
}

// Begin Hauptprogramm

int main(int argc, char *argv[])
{
//Werte füllen
vecaa.resize(7);
vecaa[0].set_nreeee(0,0,0,0,0);
vecaa[1].set_nreeee(1,8,0,0,0);
vecaa[2].set_nreeee(2,1,1,1,0);
vecaa[3].set_nreeee(3,2,4,0,0);
vecaa[4].set_nreeee(4,2,2,0,0);
vecaa[5].set_nreeee(5,2,1,0,0);
vecaa[6].set_nreeee(5,5,3,0,0);

std::cout << "Unsortiert" << std::endl;
for (int i=0;i std::cout << "Nr.: "<< vecaa[i].get_nr() << ","<< vecaa[i].get_e1()
","<< vecaa[i].get_e2() << std::endl;

sort(vecaa.begin(),vecaa.end(),kleiner);

std::cout << "Sortiert" << std::endl;
for (int i=0;i std::cout << "Nr.: "<< vecaa[i].get_nr() << ","<< vecaa[i].get_e1()
","<< vecaa[i].get_e2() << std::endl;



system("PAUSE");
return 0;
}

Ist die Definition der Funktion kleiner so richtig ?

Compiler bricht mit folgender Meldung ab:

C:Dev-Cppincludec++bitsstl_algo.h
[Warning] In function `const _Tp&:
2147 C:Dev-Cppincludec++bitsstl_algo.h
instantiated from `void std::__introsort_loop(_RandomAccessIter,
_RandomAccessIter, _Size, _Compare) [with _RandomAccessIter =
__gnu_cxx::__normal_iterator std::allocator >, _Size = int, _Compare = int (*)(c_Elemente&,
c_Elemente&)]'
2209 C:Dev-Cppincludec++bitsstl_algo.h
instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter,
_Compare) [with _RandomAccessIter =
__gnu_cxx::__normal_iterator<c_Elemente*, std::vector std::allocator >, _Compare = int (*)(c_Elemente&,
c_Elemente&)]'

Wo ist da eine Fehlermeldung? Ich kann nur eine Warnung erkennen.

Quote:
Was mache ich falsch ?

Nicht, dass ich Deine Klasse inzwischen toll finde, aber mE machst
Du nichts falsch mit dem Sortieren. Allerdings hast Du totalen Schrott
gepostet, der natuerlich durch keinen Compiler gehen sollte. Und warum
ein Praedikat statt bool ein int zurueck gibt, verstehe ich auch nicht.

Ali
PS Ungefaher so sollte es gehen

#include <iostream>
#include <vector>
#include <algorithm>

class c_Elemente
{
public:
c_Elemente();
~c_Elemente();

void set_nr (long int xnr) {m_nr = xnr; }
void set_e1 (long int e1c) {m_e[0] = e1c; }
void set_e2 (long int e2c) {m_e[1] = e2c; }
void set_e3 (long int e3c) {m_e[2] = e3c; }
void set_e4 (long int e4c) {m_e[3] = e4c; }
void set_nreeee (long int nrc,long int e1c, long int e2c,
long int e3c, long int e4c)
{
m_nr = nrc;
m_e[0] = e1c;
m_e[1] = e2c;
m_e[2] = e3c;
m_e[3] = e4c;
}
long int get_nr() {return m_nr;}
long int get_e1() {return m_e[0];}
long int get_e2() {return m_e[1];}
long int get_e3() {return m_e[2];}
long int get_e4() {return m_e[3];}

long int m_nr;
std::vector<long int> m_e;
};


//Konstruktor

c_Elemente::c_Elemente ()
: m_e(4)
{
m_nr=0; //***Mit 0 initialisieren
for (int i=0;i<=3;i++)
m_e[i]=0;
}
//Destruktor

c_Elemente::~c_Elemente()
{
}


std::vector
int kleiner (c_Elemente& s,c_Elemente& t)
{
if (s.get_e1() < t.get_e1())
return 1;
//if ((s.get_e1()==t.get_e1())&&(s.get_e2() return 0;
}


int main(int argc, char *argv[])
{
//Werte füllen
vecaa.resize(7);
vecaa[0].set_nreeee(0,0,0,0,0);
vecaa[1].set_nreeee(1,8,0,0,0);
vecaa[2].set_nreeee(2,1,1,1,0);
vecaa[3].set_nreeee(3,2,4,0,0);
vecaa[4].set_nreeee(4,2,2,0,0);
vecaa[5].set_nreeee(5,2,1,0,0);
vecaa[6].set_nreeee(5,5,3,0,0);

std::cout << "Unsortiert" << std::endl;
for (int i=0;i {
std::cout << "Nr.: "<< vecaa[i].get_nr() << ","<< vecaa[i].get_e1()
<<","<< vecaa[i].get_e2() << std::endl;
}

std::sort(vecaa.begin(),vecaa.end(),kleiner);

std::cout << "Sortiert" << std::endl;
for (i=0;i {
std::cout << "Nr.: "<< vecaa[i].get_nr() << ","<< vecaa[i].get_e1()
<<","<< vecaa[i].get_e2() << std::endl;
}

return 0;
}

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.