Set - allocator?
-
Ich will gut 60 Strukturen speichern wobei diese über eine Zahl identifiziert werden welche von 1-255 gehen kann. Für eine gute zugriffszeit denke ich sollte ein Set passend sein.
struct element{ unsigned char id; unsigned int count; bool operator<(const element& secondElement){ return id<secondElement.id; } } set<element> countElements;Mein problem ist nun das ich trotz Google und Suchfunktion nicht herausgefunden habe wie ich den Key für die Set Identifikation anpassen kann. Der Key soll in diesem falle die id der entsprechenden Struktur sein.
-
Du setzt nicht die Identifikation fest sondern die kleiner-gleich-Relation. Die wird als Funktor per Template-Argument übergeben.
-
Zusatz:
folgender Code würde das z.B. machen:
struct ltr { // ltr = lower than relation bool operator ()(element const& lhs, element const& rhs) { return lhs < rhs; } }; std::set<element, ltr> myset;
-
Konrad Rudolph schrieb:
Du setzt nicht die Identifikation fest sondern die kleiner-gleich-Relation. Die wird als Funktor per Template-Argument übergeben.
Ach so, ich dachte es wird beides benötigt. Dann wird die Identifikation ob das Element bereits existiert auch über die kleiner-gleich Relation ermittelt.
Das heißt doch aber das Einfügeoperationen genau wie die Suche O(log(n)) haben.?
-
michael8 schrieb:
Konrad Rudolph schrieb:
Du setzt nicht die Identifikation fest sondern die kleiner-gleich-Relation. Die wird als Funktor per Template-Argument übergeben.
Ach so, ich dachte es wird beides benötigt. Dann wird die Identifikation ob das Element bereits existiert auch über die kleiner-gleich Relation ermittelt.
Das heißt doch aber das Einfügeoperationen genau wie die Suche O(log(n)) haben.?Ja haben sie, das hat aber mit der Identifikation des Elements nichts zu tun sondern mit dem internen Aufbau der Datenstruktur als Suchbaum (üblicherweise ein Rot-Schwarz-Baum).
/EDIT: Die Gleichheits-Operation wird für einen Suchbaum übrigens in der Tat nicht benötigt.
-
Ok, danke.