Set (STL) fügt Duplikate hinzu

Hallo,
meine Aufgabenstellung is es den set Container zu benutzen, um Objekte einer Klasse sortiert und eindeutig in eine Struktur einzufügen.

Hauptprogramm:

#include 
#include "VokabelPaar.h"

using namespace std;

int main(void)
{
 set vokabeln;
 vokabeln.insert(new VokabelPaar("abc", "def"));
 vokabeln.insert(new VokabelPaar("abc", "def"));

 return 0;
}

Der
bool VokabelPaar::operatordeutsch

es wird also nach dem Attribut „deutsch“ der Klasse VokabelPaar sortiert.

Das Problem ist nun, dass beim Einfügen (.Insert) scheinbar nicht Objekte miteinander verglichen werden, sondern die Pointeradressen. Daher erhalte ich Duplikate in meiner Struktur. Mein Codebeispiel oben enthält also zweimal das Objekt VokabelPaar(„abc“, „def“) (mit verschiedenen Pointeradressen natürlich)

Da meine Aufgabenstellung die Lösung mit Pointern verlangt, kann ich meinen Code auch nicht einfach zu einer Komposition ändern.

Ich Danke schon jetzt für hilfreiche Antworten

Mit freundlichen Grüßen

G-Fire

Hi,

benutz den set mit einem Comparator Objekt!
Sehr vereinfacht (X ist durch deinen Element Basistyp zu ersetzen) und ohne Fehlerbehandlung ala:

class Comp 
{
public:
 bool operator ()(const X\* a, const X\* b)
 {
 return \*a element element
 }
};

und dann einen

set vokabeln;

Verbleibende Aufgabe für dich: Versteh weshalb das funktioniert, insbesondere weshalb kein „==“ notwendig ist. Und versteh, was passiert, wenn du im obigen Comparator ein "

Warum kein == oder > nötig?

Verbleibende Aufgabe für dich: Versteh weshalb das
funktioniert, insbesondere weshalb kein „==“ notwendig ist.
Und versteh, was passiert, wenn du im obigen Comparator ein
"

Howdy,

Auch eine erneute Runde Googlen brachte mir keine Erleuchtung.
Also weshalb benötige ich nur einen Vergleich um zwischen drei
Fällen zu unterscheiden?

primär war das eine Aufforderung an dich, mal in die Implementierung von insert() zu schauen (das geht mit VS/VS Express indem man mit der rechten Maustaste auf dem insert() den Punkt „Gehe zu Definition“ auswählt.

Ansonsten zum Thema Logik:

Punkt 1: Warum man kein > braucht:
( a > b) !(a (a !(a

1 Like