C++ std::map<std::string, int> bekommen Sie Werte, deren Schlüssel beginnt mit einer bestimmten Zeichenfolge
Bin ich mit std::map in einer solchen Art und Weise:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
map<string, int> my_map;
my_map.insert(pair<string, int>("Ab", 1));
my_map.insert(pair<string, int>("Abb", 2));
my_map.insert(pair<string, int>("Abc", 3));
my_map.insert(pair<string, int>("Abd", 4));
my_map.insert(pair<string, int>("Ac", 5));
my_map.insert(pair<string, int>("Ad", 5));
cout<<my_map.lower_bound("Ab")->second<<endl;
cout<<my_map.upper_bound("Ab")->second<<endl;
return 0;
}
Ich würde gerne alle Werte, deren Schlüssel beginnt mit einer bestimmten Zeichenfolge (z.B. "Ab"). Ich kann leicht die beginnen iterator map::lower_bound. Aber wie bekomme ich eine Obere Schranke? Muss ich zum Durchlaufen der ganzen Reihe, beginnend an der unteren Grenze und prüfen Sie jede Taste, wenn er startet zwar mit "Ab"?
- In diesem speziellen Fall
my_map.lower_bound("Ac")
scheint das zu tun - Warum holt man nicht die Grenze für "Ac"? kein Buchstabe zwischen b und c.
- Ich brauche mehr Allgemeinen Ansatz. Beispiel war einfach das problem zu beschreiben. Ich kann jede Art von string, und anzeigen enthalten kann jede Art von string.
- Solange wie das, was Sie brauchen, ist "beginnt mit" .. " ich denke, das wird gut funktionieren.
- Ok, Wenn ich auf der Suche für jede Taste, die beginnt mit "Az"? Untere Schranke offensichtlich "Az" und der oberen Grenze?
- Die meisten hier angebracht, denke ich, ist das definieren einer Funktion, so dass, sobald Sie das Letzte Zeichen in Ihrer möglichen chars, Sie 'll haben, erhöht sich der bisherige Charakter-so, dass die "Az" geworden ist, "Ba", oder so ähnlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich eine ähnliche Antwort überprüfen Sie heraus diese Seite: (Karte komplexe Suche-Funktion)
Code Ausüben:
Sieht es aus, als wenn in diesem Beispiel die Iteration von der upper_bound nach hinten bis zum Anfang der Suche nach dem bestimmten substring
Dieses Beispiel ist etwas anders, aber sollte der server als ein guter Baustein
Funktioniert der code mit jedem string-Taste.
können Sie Boost-filter iterator, die Ihnen eine "begin" und "end" - iterator von der normalen Iteratoren, wenn Sie ein Prädikat (eine bool-Funktion, die sagt, welche Werte gehören)
Beispiel: