 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Marten Weber Guest
|
Posted: Tue Nov 11, 2003 4:18 pm Post subject: Sortieren |
|
|
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
|
Posted: Tue Nov 11, 2003 4:55 pm Post subject: Re: Sortieren |
|
|
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 |
|
 |
|
|
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
|
|