sto usando std :: map in modo tale:C++ std :: map <std :: string, int> valori ottenere che cominciano chiave con una particolare stringa
#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;
}
Mi piacerebbe ottenere tutti i valori la cui chiave inizia con una stringa particolare (ad esempio "Ab"). Posso facilmente ottenere l'iteratore di inizio usando map :: lower_bound. Ma come posso ottenere un limite superiore? Devo ripetere l'intero set partendo dal limite inferiore e controllare ogni tasto se inizia ancora con "Ab"?
In questo caso particolare 'my_map.lower_bound (" Ac ")' sembra farlo –
Perché non ottenere il limite per "Ac"? nessuna lettera tra b e c. – stardust
Ho bisogno di un approccio più generale. L'esempio era solo per descrivere il problema. Posso essere qualsiasi tipo di stringa e la mappa può contenere qualsiasi tipo di stringa. – Dejwi