首頁 > 後端開發 > C++ > 主體

如何為排序的 C 容器實作基於迭代器的二分搜尋演算法?

Mary-Kate Olsen
發布: 2024-10-24 01:30:01
原創
473 人瀏覽過

How to Implement an Iterator-Based Binary Search Algorithm for Sorted C   Containers?

C 容器的帶迭代器傳回的二分搜尋演算法

STL 的std::binary_search 演算法有效地辨識排序中元素的存在演算法容器,但它只傳回一個布林值。對於元素的確切位置至關重要的場景,您可能需要基於迭代器的搜尋演算法。

為了滿足此需求,可以採用以下自訂二分搜尋演算法:

<code class="cpp">template<class Iter, class T>
Iter binary_find(Iter begin, Iter end, T val)
{
    // Finds the lower bound in at most log(last - first) + 1 comparisons
    Iter i = std::lower_bound(begin, end, val);

    if (i != end &amp;&amp; !(val < *i))
        return i; // found
    else
        return end; // not found
}</code>
登入後複製

演算法利用std::lower_bound 來找出容器中值的插入點(如果要插入的話) 。如果該值存在,則傳回迭代器;否則,返回結束迭代器。這種方法既保證了速度又保證了精度

你也可以考慮使用std::set,它提供了一個迭代器find(T key) 函數,可以直接傳回指向給定專案的迭代器。但是,這可能不適合需要重複元素的情況。

以上是如何為排序的 C 容器實作基於迭代器的二分搜尋演算法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!