używam std :: map w taki sposób:C++ std :: map <std :: string, int> uzyskać wartości, których klucz zaczyna się od określonego ciągu znaków
#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;
}
Chciałbym uzyskać wszystkie wartości, których klucz zaczyna się od określonego ciągu (na przykład "Ab"). Mogę łatwo uzyskać iterator początku za pomocą map :: lower_bound. Ale jak mogę uzyskać górną granicę? Czy muszę powtarzać cały zestaw zaczynając od dolnej granicy i sprawdzać każdy klucz, czy nadal zaczyna się od "Ab"?
W tym szczególnym przypadku 'my_map.lower_bound (" Ac ")' wydaje się robić to –
Dlaczego nie otrzymać ograniczenia dla "Ac"? brak liter między b i c. – stardust
Potrzebuję bardziej ogólnego podejścia. Przykład miał tylko opisać problem. Mogę być dowolnym ciągiem znaków, a mapa może zawierać dowolny ciąg znaków. – Dejwi