我该怎么做才能改进指针向量中的搜索?

时间:2018-09-06 04:06:05

标签: c++ search vector lower-bound

我的目标是检查向量Person*中是否有名称为Person的{​​{1}}对象。向量按名称按字母顺序排序。制作临时person_name是我看到的使Lower_bound调用与名称一起使用的唯一方法。有没有更有效的方法,或者执行比较需要Person吗?

temp

1 个答案:

答案 0 :(得分:3)

不需要temp。您需要具有适当签名的比较器。

例如,当使用personVec.begin()解引用Person*&结果时 并且person_name的类型为PersonName,那么您可以拥有具有这种签名的比较器:

bool compare(Person* const& a, PersonName const& b);

这里只是普通函数,但具有此类签名的其他可调用对象也将起作用。然后,您可以将lower_boundperson_name一起直接使用:

auto it = lower_bound(personVec.begin(), personVec.end(), person_name, compare);

您的一般问题是关于如何提高性能的。看不到4行程序就不可能暗示这一点。应该通过在数据量很大的情况下对整个程序进行概要分析并分析结果来找到它。例如,排序personVec可能比lower_bound花费更多时间。这样,与优化unordered_set中的搜索功能相比,使用vector而不是vector可以提供更好的结果。