Liste mit einzigartigen Elementen
Ich brauche einen container, wo:
- wenn ich ein neues element hinzuzufügen, der noch nicht existiert, wird es Hinzugefügt, um die Spitze der Liste
- wenn ich ein element, das schon existiert, ist nicht Hinzugefügt, und ich bekomme ich den index in der Liste
- nachdem das element eingefügt wird, es hat immer den gleichen index, und es kann zugegriffen werden über diesen index
std::set
allein ist nicht ausreichend, da ich keinen Zugriff auf die Elemente mit [index]
. std::list
keines von beiden, denn es speichert nicht nur einzigartige Elemente.
Habe ich eine gemischte Lösung mit list
und map
aber vielleicht gibt es einige standard, generische Vorlage für?
Möchte ich nicht verwenden, zu steigern. Aufrufen list::unique
nach jedem einfügen ist auch keine Lösung.
Wie über Ihre eigenen Rollen? Haben Sie versucht,? Klingt wie ein sehr dünner wrapper über
Die Umsetzung dieser mit
list und anzeigen, wenn Sie Häufig fügen Sie vorhandene Elemente.
Ich weiß, Sie wollen nicht, um die Verwendung von Boost, aber das ist effektiv das, was Steigern.bimap hat!
Es sind effektiv 2 Tasten (das element selbst, und die zugeordneten integer-index, der Ihr zugewiesen wurde).
list
...Die Umsetzung dieser mit
list
wäre nicht gut; die erste Kollision-Erkennung wäre O(n), als würden die suchen Dinge, die durch den index.list und anzeigen, wenn Sie Häufig fügen Sie vorhandene Elemente.
Ich weiß, Sie wollen nicht, um die Verwendung von Boost, aber das ist effektiv das, was Steigern.bimap hat!
Es sind effektiv 2 Tasten (das element selbst, und die zugeordneten integer-index, der Ihr zugewiesen wurde).
InformationsquelleAutor Jakub M. | 2012-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur ein
std::list
(oderstd::vector
, für diese Angelegenheit),du wirst nicht um einen linearen Suche, wenn Sie nicht wollen
vermeiden Sie doppelt, aber Sie wollen, um die original-Reihenfolge. Eine einfache
std::vector
basierte Lösung könnte sein:Alternativ können Sie
std::map
:(Das setzt Voraus, dass
T
unterstützt<
. Wenn nicht, müssen Sie zum herstelleneine Bestell-Kriterien sind. Oder verwenden Sie
unordered_map
" und definieren Sie einen hash-code füres.)
InformationsquelleAutor James Kanze