为了说明我的问题,我从 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"));
但是,如果我需要计算姓氏是“White”的人数,然后继续找出有多少“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);
或者有没有更聪明的方法来做到这一点?不仅从方便的角度来看,而且从性能的角度来看。