Boost MultiIndex - Objekte oder Zeiger (und wie benutzt man Sie?)?
Bin ich die Programmierung eines Agenten-basierten simulation und haben entschieden, dass die Erhöhung der MultiIndex ist wahrscheinlich der effizienteste container für meine Erfüllungsgehilfen. Ich bin kein professioneller Programmierer, und mein hintergrund ist sehr fleckig. Ich habe zwei Fragen:
- Ist es besser, die Behälter enthalten die Wirkstoffe (Klasse
Host
) selbst, oder ist es effizienter für den Behälter zu haltenHost *
? Hosts wird manchmal aus dem Speicher gelöscht (das ist mein plan, anyway... Lesen müssen, bis aufnew
unddelete
). Der Gastgeber private Variablen erhalten gelegentlich aktualisiert, die ich hoffe, durch diemodify
Funktion in MultiIndex. Gibt es keine anderen Kopien der Gastgeber in der simulation, d.h., Sie werden nicht in andere Behälter. - Wenn ich den Zeiger verwenden, um Hosts, wie richte ich den Schlüssel Extraktion richtig? Meine folgende code kann nicht kompiliert werden.
//main.cpp - ATTEMPTED POINTER VERSION
...
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/tokenizer.hpp>
typedef multi_index_container<
Host *,
indexed_by<
//hash by Host::id
hashed_unique< BOOST_MULTI_INDEX_MEM_FUN(Host,int,Host::getID) > //arg errors here
> //end indexed_by
> HostContainer;
...
int main() {
...
HostContainer testHosts;
Host * newHostPtr;
newHostPtr = new Host( t, DOB, idCtr, 0, currentEvents );
testHosts.insert( newHostPtr );
...
}
Kann ich nicht finden, genau Analog dem Beispiel in der Boost Dokumentation, und meine Kenntnisse in C++ - syntax ist noch sehr schwach. Der code scheint zu funktionieren, wenn ich alle ersetzen der Zeiger verweist, mit der die Objekte der Klasse selbst.
So, wie ich es Lesen kann, der Boost Dokumentation (siehe übersichtstabelle unten) setzt Voraus, dass ich sollte in der Lage sein zu verwenden member-Funktionen mit Zeiger-Elemente.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
Host
enthält viele Daten, die Sie nutzen könntenshared_ptr
zu vermeiden, kopieren. Könnten Sie MultiIndex mitshared_ptr
es:Dann können Sie es wie folgt:
get_id
auf meine Antwort. Wenn Sie nicht verwendenshared_ptr
es bedeutet, dass jederHost
kopiert werden in MultiIndex-container und kopieren wird da sein, bis Sie Sie entfernen es von dort.getID
definiert wurde? Mein Beispiel ohne Fehler kompiliert.const
. Sollten Sie definieren es alsint Host::getID( void ) const { return id; }
da die Elemente in einer multi_index_container behandelt werden als konstant.(*it)->getID()
oderit->get()->getID()
.