首页 > 解决方案 > 我可以做些什么来改进指针向量中的搜索?

问题描述

我的目标是检查一个名为Person*Person对象的向量person_name。该向量按名称的字母顺序排序。制作临时文件Person是我见过的让这个 lower_bound 调用与该名称一起工作的唯一方法。是否有更有效的方法来执行此操作,或者是否有temp必要执行比较?

//person_name is a string
Person temp(person_name);
auto it = lower_bound(personVec.begin(), personVec.end(), &temp, personCompare());
if (it != personVec.end() && (*it)->getName() == person_name) {}
else { return false;  }

标签: c++searchvectorlower-bound

解决方案


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

例如,当使用 and类型取消引用personVec.begin()结果时,您可以使用此类签名的比较器:Person*&person_namePersonName

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

这只是普通函数,但其​​他具有此类签名的可调用函数也可以使用。然后你可以直接使用lower_boundwith person_name

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

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


推荐阅读