On Tue, 2003-10-28 at 12:26, Bastian Schern wrote:
Hallo,
ich habe ein PacketFile (tcpdum, libpcap) und möchte feststellen, wie oft eine bestimmte IP Kombination aufgetreten ist.
Ich habe mir das folgendermaßen gedacht:
//...
typedef struct flow_key_t { uint32_t src_addr; uint32_t dst_addr; };
//...
int main( ... ) { map
flow_keys; for( pkt_num_t i=0; i
//... }
Leider geht das so nicht. Doch ;)
Kleines, zusammengehacktes Beispiel, das vermutlich ziemlich genau das
macht, was Du vorhast:
#include <map>
#include <iostream>
struct mykey_t {
int32_t a;
int32_t b;
} ;
static mykey_t myarray[] = {
{ 0, 1 },
{ 1, 1 },
{ 1, 23 },
{ 2, 1 },
{ 0, 1 },
{ 1, 1 },
{ 1, 1 },
{ 2, 1 },
{ 1, 1 },
{ 4, 1 }
};
bool operator< ( const mykey_t &a, const mykey_t &b)
{
int64_t A = a.a ;
A <<= 32;
A += a.b;
int64_t B = b.a;
B <<= 32;
B += b.b;
return A < B;
}
int main()
{
std::map
&)::ltstr' || uses local type `analyzeAllPackets(std::vector
>&)::ltstr' Ich bekomme folgende Fehlermeldung: trafana.cpp|78| error: template-argument ` || analyzeAllPackets(std::vector
trafana.cpp|78| error: ISO C++ forbids declaration of `flow_keys' with no type Keine Ahnung, was das nun mit dem obigen Code zu tun hat. Ich würde mal darauf tippen, dass Du nicht nur einen Bug in deinem Code hast.
Wie mache ich das am besten und ist <map>? Die Frage ist natürlich auch, ob <map> für meinen Anwendungsfall überhaupt geeignet ist
Kommt darauf an ... prinzipiell ja. Was Du eigentlich suchst, ist ein assoziativer Speicher. std::maps sind eine recht effektive Implementierung davon, in der Literatur gibt es aber noch zahlreiche Andere.
oder ob z.B. eine
besser geeignet ist? Kommt darauf an:
* hash_map's sind nicht Teil der Standards und gibt es z.B. in GCC nicht. * maps sind intern sortiert (Binärbäume), hashmaps sind grundsätzlich unsortiert. * hashmaps sind theoretisch deutlich schneller als maps. D.h. * wenn Portabilität eine Rolle spielt, wirst Du deine eigene hashmap-Implementierung realisieren müssen. * wenn Sortierung/interne Ordnung eine Rolle spielt, kommen hashmaps kaum in Frage. * ob sich der Geschwindigkeitsvorteil von hashmaps gegenüber maps überhaupt auswirkt, oder ob andere Nachteile deutlich überwiegen (z.B. Portabilität/Sortierung) hängt von vielen anderen Faktoren der Anwendung ab. Ralf