Ich habe einen großen STL-Container von std::string
(Hunderttausende von Einträgen). Ich benutze gerade eine vector
, aber ich bin glücklich, mich zu ändern. Die Inhalte sind alphabetisch sortiert und bestehen aus alphabetischen Kleinbuchstaben a-z plusñ
.Finden Sie alle Strings (nicht-niedriger ASCII) beginnend mit einem Präfix in einem geordneten STL-Container
Ich versuche, eine Funktion zu implementieren, die eine const std::string& prefix
empfängt und ein Paar Iteratoren zurückgibt, wobei einer auf das erste Element zeigt, das mit einem solchen Präfix beginnt, und das andere auf den letzten verweist. Wenn keine Zeichenfolgen den Kriterien entsprechen, geben Sie zwei identische Iteratoren zurück. Ich brauche Effizienz beim Nachschlagen, weil der Vektor sehr groß ist, also möchte ich ihn für eine binäre Suche verwenden.
Ich denke, std::lower_bound
ist, was ich suche, aber ich vermisse eine Funktion zu vergleichen std::string
s, die mit der spanischen ñ
umgehen kann.
Verwenden Sie UTF-8? Solange Sie die gleiche Codierung in Ihrer Such-Präfix-Zeichenfolge verwenden, die Sie im Vektor verwenden, sollten Sie in Ordnung sein. Für die Geschwindigkeit können Sie die Präfixlänge in das Lambda eintragen und die entsprechende Überladung von 'std :: string :: compare' aufrufen. – paddy
Sie können eine benutzerdefinierte Vergleichsfunktion schreiben, die an 'lower_bound()' übergeben wird, aber jeder von Ihnen durchgeführte Vergleich muss Zeichensatz/Gebietsschema berücksichtigen, da 'ñ' kein ASCII ist. 'std :: string' kennt nur' char' Werte und hat kein Konzept von Zeichensatz/Gebietsschema, also müssen Sie es manuell behandeln. 'ñ' kann ein anderer' char'-Wert in verschiedenen Zeichensätzen sein, und es existiert überhaupt nicht in einigen Zeichensätzen. –