Tôi đang sử dụng std :: bản đồ theo cách như vậy:C++ std :: map <std :: string, int> nhận giá trị mà bắt đầu quan trọng với một chuỗi đặc biệt
#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;
}
Tôi muốn nhận tất cả các giá trị có khóa bắt đầu bằng một chuỗi cụ thể (ví dụ: "Ab"). Tôi có thể dễ dàng có được trình lặp bắt đầu sử dụng bản đồ :: lower_bound. Nhưng làm thế nào tôi có thể nhận được một ràng buộc trên? Tôi có phải lặp lại toàn bộ thiết lập bắt đầu từ giới hạn dưới và kiểm tra mọi khóa nếu nó vẫn bắt đầu bằng "Ab"?
Trong trường hợp cụ thể này 'my_map.lower_bound (" Ac ")' có vẻ như vậy –
Tại sao không bị ràng buộc cho "Ac"? không có chữ cái giữa b và c. – stardust
Tôi cần cách tiếp cận tổng quát hơn. Ví dụ chỉ để mô tả vấn đề. Tôi có thể là bất kỳ loại chuỗi nào và bản đồ có thể chứa bất kỳ loại chuỗi nào. – Dejwi