Ich versuche, einen Vektor von Objekten zu sortieren, so dass Objekte mit den gleichen Eigenschaften direkt nebeneinander liegen. Task
ist eine Klasse, die irgendwo 3 Zeiger auf einige Daten nimmt und hält.Std :: gleiche Objekte mit mehreren Eigenschaften sortieren
vec.push_back(Task(&propertyOne, &propertyTwo, &propertyThree));
Wenn ich einen Vektor voll davon haben, möchte ich sie sortieren, so dass jeder Task
, die gleich propertyOne
, propertyTwo
hat, und propertyThree
sind miteinander in den Vektor nächsten setzen. Wenn die beiden Objekte Task
nicht gleich sind, spielt es keine Rolle, wohin sie gehen. Obwohl es für sie nett wäre, neben die Task
Objekte zu gehen, mit denen sie am meisten gemeinsam haben.
Wie mache ich das? Ich habe das Offensichtliche versucht (return a.propertyOne == b.propertyOne
), aber das schien überhaupt nicht zu funktionieren, und es vergleicht auch nur die erste Eigenschaft.
Das sieht gut aus, aber a, b und c sind Klassenobjekte (in diesem Fall Zeiger auf Klassenobjekte). Kann ich den
Dooskington
@Dooskington Hängt davon ab, wie Sie sie vergleichen. Wenn Sie möchten, dass die Objekte selbst verglichen werden, müssen Sie die Zeiger dereferenzieren. (Wenn Sie das möchten, müssen Sie Ihre Frage wirklich bearbeiten, und dann bearbeite ich meine Antwort.) Meine Checks vergleichen den Speicherort der Objekte im Speicher. Gegeben: 'auto a = neuer String, b = neuer String;' 'a' ist nicht gleich' b', aber '* a' ist gleich' * b'. Ist das sinnvoll? Versuchen Sie hier Objekteigenschaften oder nur den Speicherort zu vergleichen? –
Nur der Speicherort. Um genauer zu sein, sortiere ich eine Warteschlange von RenderCommand-Objekten und jeder RenderCommand hat eine Textur *, ein Material * und einen Primitivtyp (was eine Enum-Klasse ist). Wenn also die Texture-Zeiger auf die gleiche Textur zeigen, die Material-Zeiger auf dasselbe Material zeigen und PrimativeType gleich dem anderen PrimativeType ist, sollten die RenderCommands in der Warteschlange nebeneinander stehen. Ich hoffe das ergibt Sinn. – Dooskington