- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 vector find() 或 binary_search() 中搜索元素时,哪个函数更有效?
最佳答案
简单的答案是:std::find
用于未排序的数据,std::binary_search
用于排序的数据。但我认为这还不止于此:
这两种方法都采用包含 n
元素的范围 [start, end)
和将作为输入找到的值 x
。但请注意 std::binary_search
仅返回一个 bool
的重要区别,它告诉您该范围是否包含该元素。 std::find()
返回一个迭代器。所以两者都有不同但重叠的用例。
std::find()
很简单。 O(n)
迭代器递增和 O(n)
比较。输入数据是否排序也无关紧要。
对于 std::binary_search()
您需要考虑多个因素:
它只适用于排序的数据。您需要考虑分类成本。
比较次数总是O(log n)
。
如果迭代器不满足LegacyRandomAccessIterator
迭代器增量的数量是O(n)
,当它们满足这个要求时它将是对数的。
结论(有点自以为是):
std::find()
std::binary_search()
std::set
、std::map
或它们的无序对应物这样的容器,也可以考虑它们的内置方法,例如 std::set::find
关于c++ - STL 中的 find() 与 binary_search(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68220759/
我有一个自定义类和 std::vector 填充了此类的对象。我想在此数组中执行 binary_search。 我像这样在我的类中重载了运算符: bool operator ==(const some
我想用指针实现binary_search #include #include using namespace std; int binary_p(int x[],int size,int targ
我希望这不是痛苦的显而易见。我收到此神秘错误: fold.cpp:92: error: expected primary-expression before ‘)’ token 它所指的行是: if
我有一个 vector v 类 X 的实例 class X { public: int attribute_1; ... operator==(const int i){return th
我被这个问题困住了,我正在处理位置 vector 。在一种情况下,该 vector 相对于偶“位置”的第一个分量排序,在另一种情况下相对于另一个分量排序,在这两种情况下,偶的另一个元素保持不变。所以例
这段代码有什么问题吗? bool Spellcheck::smart_comp(string value, string key){ return true; } void func(){
全部,我有这样的代码: bool ISearchable::PerformSearch(const vector &passList, const string &lname, const strin
我正在阅读有关 binary_search 的内容,然后我尝试使用谓词来实现它。这是我的代码(我还包括了我正在使用的排序谓词)。我知道小于是默认值。这是粗略的测试代码 class person { p
我目前正在考虑使用 std::binary_search()(来自库)来确定列表中是否存在某个实例。在我开始使用它之前,我想知道它是如何工作的。 我的理解是它使用比较(对于用户定义的结构/类,它需要访
我尝试制作一个程序,使用 std::binary_search 检查数字是否在向量中 我知道我可以使用 std::find , 但我听说 std::binary_search如果比 std::find
我有一个按其整数索引排序的类对象 vector 。但是对象的索引是由类的成员函数生成的 - 因此没有 int id 存储为成员变量。 class boundary { public:
我有一些数据存储在排序的 vector 中。该 vector 按某个键排序。我知道 STL 有一个算法来检查一个元素是否在这个排序列表中。这意味着我可以这样写: struct MyData { int
我在这里找到了很多关于该主题的答案,但我无法运行我的代码。 编辑:发布的示例现在可以在引入缺失的东西后使用。希望有人可以使用这个例子作为自己实验的基础。我还介绍了将此示例用作随机访问迭代器所缺少的东西
这个问题在这里已经有了答案: Where can I get a "useful" C++ binary search algorithm? (9 个回答) 关闭5年前。 我想在 binary-sea
binary_search() 函数定义在头文件中,用于查找指定区域内是否包含某个目标元素。 该函数有 2 种语法格式,分别为: //查找 [first, last) 区域内是否包含 val boo
thrust::binary_search 据我所知,除默认流外的所有段错误。我在文档中找不到任何描述这种限制的信息,所以我希望专家能启发我如何正确使用。 这是一个简单的例子。此测试代码创建一个未排序
在下面的程序中,binary_search 返回 Err(2) 而不是预期的 Ok(0)。这是错误吗? fn main() { let x = vec!["slot", "s"]; l
std::find_if 在其重载函数之一中采用谓词。绑定(bind)器使得为用户定义的类型编写 EqualityComparators 并将它们用于动态比较或静态比较成为可能。 相比之下,标准库的二
std::binary_search 击败了一个简单的自制二进制搜索算法(再次): // gcc version 4.8.2 X86_64 #ifndef EXAMPLE_COMPARE_VERSIO
在我检测到 std::upper_bound 之前,我实现了我自己的 binarySearch 版本来确定所需元素的索引。该实现有效,但与线性搜索相比,我的 binarySearch 只快了一点点。随
我是一名优秀的程序员,十分优秀!