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;
}

http://ideone.com/5YPQmj

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.

InformationsquelleAutor Dejwi | 2013-04-28
Schreibe einen Kommentar