Ich habe eine Klasse, die list of items
(eine Instanz einer Klasse namens ItemList
) hat. Diese ItemList
Klasse hat Funktionen wie:Hash-Funktion für boost_unordered, keine Voreinstellung möglich?
ItemIndexType AddItem(...);
void DoSomething(ItemIndexType index, ...);
ItemIndexType
wirkt als eine Art von "smart Iterator" und hat die Elementvariablen
myIter (iterator to a multimap in the ItemList)
,
myList (pointer to the ItemList)
.
Und ein paar mehr für die Hausverwaltung verwendet.
Es ist schlau, da, wenn ich einen Artikel aus der Artikelliste löschen würde, alle Indizes, die auf den Artikel zeigen, gelöscht werden. (zeigt auf das Ende der Karte).
Es funktioniert jetzt wie beabsichtigt, und ich ändere es lieber nicht mehr zu sehr. Doch für die Anwendung muss ich etwas extra tun: Ich baue ein „Reset“ -Funktion:
void ResetItem(ItemIndexType ind);
Diese Funktion würde „Reset“ das Element ind
Punkte auf den ursprünglichen Wert dann. Ich möchte den ursprünglichen Wert nicht in der Elementklasse speichern. Daher habe ich beschlossen, einen Container zu erstellen, der als Schlüssel den Elementindex und als Wert die ursprünglichen Argumente enthält, mit denen der Artikel strukturiert wurde.
Da Bestellung nicht nur nicht benötigt wird, ist es auch unmöglich, ich denke Boost :: ungeordnet ist der Weg zu gehen.
das Deque Ändern I verwendet Spur des Indizes auf die Hash-Tabelle zu halten, ergab allerdings einen seltsamen Fehler:
X \ boost \ funktionellen \ hash \ extensions.hpp (176): Fehler C2665: ‚boost: : hash_value‘: keine der 16 Überlastungen kann alle Argumenttypen
konvertieren Wenn die Liste erstellt wird:
typedef boost::unordered_map<ItemIndexType, ListDataType> ListContType;
Wie eine Hash-Funktion für einen benutzerdefinierten Datentyp zu schaffen?
erstellen. "Da Boost.Umordered boost :: hash verwendet, unterstützt es auch einige andere Typen, einschließlich Standardcontainern. Um alle Typen zu verwenden, die von diesen Methoden nicht unterstützt werden Boost.Hash muss erweitert werden, um den Typ zu unterstützen oder eigene benutzerdefinierte Gleichheitsprädikate und Hashfunktionen zu verwenden. " -> http://www.boost.org/doc/libs/1_45_0/doc/html/hash/custom.html – icecrime
danke, das hilft mir, den spezifischen Schlüssel zu identifizieren (der Iterator in 'myIter' gespeichert. Aber es tut es immer noch nicht 't geben eine Umwandlung von std :: * :: iterator zu einem der eingebauten Typen! – paul23