Ich deklariere eine Hash-Map wie map<char *, int> m
in meinem C++ - Programm. Aber es funktionierte nicht, also befolgte ich die Anweisungen von Using char* as a key in std::map und erklärte meine Karte wie map<char *, int, cmp_str> m
. Mein Programm Art sieht aus wie dieseChar * als Schlüssel in einer Karte C++
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
int main(int argc, char *argv[])
{
map<char *, int, cmp_str> m
//Reading strings from a file
while(not end of file)
{
// char *str contains the line
if(m.find(str) != m.end()) {m[str]++; }
else {m[str] = 1;}
}
}
Wenn ich das Programm ausführen, wenn alle Saiten findet aber zunächst auch wenn sie nicht eingesetzt werden. Als ich versuchte, map<string, int> m;
zu verwenden und char *str
in std::string
umwandelte, funktioniert es gut. Aber die Eingabedatei ist so groß, dass ich viel Zeit brauche, wenn ich String benutze. Ich bin mir nicht sicher, warum es alle Zeichenfolgen findet, wenn ich char *
verwende. Jede Hilfe wäre willkommen.
Also, was ist deine Frage? –
Eigentlich ist ['std :: map'] (http://en.cppreference.com/w/cpp/container/map) keine * Hash * Map, sondern ein Binärbaum. Wenn Sie einen Hash wünschen, sollten Sie ['std :: unordered_map'] (http://en.cppreference.com/w/cpp/container/unordered_map) verwenden. –
Veröffentlichen Sie einen [MCVE] (http://stackoverflow.com/help/mcve). Der von Ihnen gepostete Code ist nicht * vollständig *. –