2016-05-23 12 views
-1

Ich habe eine Struktur node, mit label und cost.
Ich möchte eine node in eine set für n mal einfügen, wobei jeder Knoten die Bezeichnung n hat.Wie kann ich n Variablen des Typs struct zu einer Menge erstellen und hinzufügen?

Irgendwie, wenn ich es baue und laufe, bekomme ich immer noch nur eine Variable in meinem Set. Was habe ich falsch gemacht?

struct node 
{ 
    int label; 
    int cost; 
    bool operator < (const node &other) const { return cost < other.cost; } 
    bool operator == (const node &other) const { return label < other.label; } 
}; 
I'm not sure if that is correct. 

(GELÖST) wie meine Schleife sieht aus wie jetzt:

multiset <node> Q; //instead of set <node> Q; 

    for (i=1;i<=n;i++) 
     { 
      node a; 
      a.label=i; 
      a.cost=LONG_MAX; 
      Q.insert(a); 
     } 
+0

Ein 'Set' enthält nur eindeutige Elemente, keine Duplikate. Wie sieht Ihre Vergleichsfunktion ('operator <') für 'node' aus? – 1201ProgramAlarm

+0

Strukturknoten { Int-Label; Int Kosten; bool operator <(const node & andere) const {return cost meiznub

+0

weiß nicht, ob es die Ursache für Ihren Fehler ist (die tatsächlichen Daten benötigen), aber es ist logisch inkonsistent, Labelfeld für Gleichheit und Kostenfeld für weniger als zu verwenden. –

Antwort

0

Die Knoten Sie hinzufügen alle den gleichen Kosten haben, was ist das, was Sie als Sortierschlüssel verwenden. A set speichert nur eindeutige Elemente, so dass Sie nur ein Element für bestimmte Kosten erhalten. Wenn Sie mehrere Elemente mit denselben Kosten speichern möchten, verwenden Sie stattdessen eine multiset.

+0

Wie sind Sie zu dem Schluss gekommen, dass "Kosten" als Sortierschlüssel verwendet wird? –

+0

@BatCoder Es ist in seiner Antwort auf meinen Kommentar zu der Frage. Es sollte in der Frage bearbeitet werden, anstatt in einem Kommentar zu bleiben. – 1201ProgramAlarm

+0

oh, das hat mein Problem wirklich gelöst, vielen Dank !!! – meiznub