我的目标是检查 Person*
的 vector 中是否有名为 person_name
的 Person
对象。该 vector 按名称的字母顺序排序。创建一个临时 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; }
最佳答案
不需要 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
中的搜索功能得到更好的结果。
关于c++ - 我可以做些什么来改进指针 vector 中的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52196353/