我的目标是检查向量Person*
中是否有名称为Person
的{{1}}对象。向量按名称按字母顺序排序。制作临时person_name
是我看到的使Lower_bound调用与名称一起使用的唯一方法。有没有更有效的方法,或者执行比较需要Person
吗?
temp
答案 0 :(得分:3)
不需要temp
。您需要具有适当签名的比较器。
例如,当使用personVec.begin()
解引用Person*&
结果时
并且person_name
的类型为PersonName
,那么您可以拥有具有这种签名的比较器:
bool compare(Person* const& a, PersonName const& b);
这里只是普通函数,但具有此类签名的其他可调用对象也将起作用。然后,您可以将lower_bound
与person_name
一起直接使用:
auto it = lower_bound(personVec.begin(), personVec.end(), person_name, compare);
您的一般问题是关于如何提高性能的。看不到4行程序就不可能暗示这一点。应该通过在数据量很大的情况下对整个程序进行概要分析并分析结果来找到它。例如,排序personVec
可能比lower_bound
花费更多时间。这样,与优化unordered_set
中的搜索功能相比,使用vector
而不是vector
可以提供更好的结果。