c++ - 我可以做些什么来改进指针 vector 中的搜索?

标签 c++ search vector lower-bound

我的目标是检查 Person* 的 vector 中是否有名为 person_namePerson 对象。该 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_namePersonName 类型那么你可以有这样签名的比较器:

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 中的搜索功能得到更好的结果。

关于c++ - 我可以做些什么来改进指针 vector 中的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52196353/

相关文章:

c++ - 如何在 CMake 中链接第三方库 (LibUSB)

c++ - 初始化指向指针的指针 vector

c++ - 错误 C2440 : 'return' : cannot convert from 'int [2]' to 'int (&&)[2]'

c++ - 使用混合 C 和 C++ 对函数的 undefined reference

c++ - opencv库中的水平翻转

c++ - 我可以滥用谓词在 remove_if 删除元素之前对元素执行操作吗?

c++ - 正则表达式与字符串 :find() for simple word boundary

javascript - 需要帮助使用 jquery 搜索 XML 文件并将结果存储在变量中供以后使用

algorithm - 用于查找大于或小于每个笛卡尔维度中某个值的所有点的空间数据结构

c++ - 如何在 C++ 中编写 ofstream vector ,它接收所有不同的输出流,如 cout、字符串流和 ofstream