Чтобы проиллюстрировать свой вопрос, я скопировал приведенный ниже код из примера «Телефонная книга» справочного документа Boost.
struct phonebook_entry
{
std::string family_name;
std::string given_name;
std::string ssn;
std::string phone_number;
}
И я могу сделать частичный поиск, как показано ниже
// search for Dorothea White's number
phonebook::iterator it=pb.find(boost::make_tuple("White","Dorothea"));
Однако, если мне нужно подсчитать количество людей с фамилией «Белые», а затем найти, сколько «Белых» имеют «Доротею» в качестве имени, то как лучше всего это сделать? Я думаю, что могу выполнить два частичных запроса с помощью pb.find(boost::make_tuple("White") и pb.find(boost::make_tuple("White","Dorothea"). Но меня беспокоит, не вызовет ли это проблема с производительностью? Поскольку второй запрос не знает первого запроса и просто выполняет поиск по всему контейнеру. Предоставляет ли Boost что-то вроде следующего:
std::pair<iterator,iterator> partialResults=pb.equal_range("White");
std::pair<iterator, iterator> partialOfPartial=pb.equal_range("Dorothea", partialResults);
Или есть более разумный способ сделать это? Не только с точки зрения удобства, но и с точки зрения производительности.