C++ multimap::equal_range() 函式



C++ 的std::multimap::equal_range() 函式用於返回一對迭代器,表示具有特定鍵的元素範圍。它允許檢索與給定鍵匹配的所有條目。第一個迭代器指向具有該鍵的第一個元素,第二個迭代器指向具有該鍵的最後一個元素的下一位置。此函式的時間複雜度是對數的,即 O(log n)。

語法

以下是 std::multimap::equal_range() 函式的語法。

pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
pair<iterator,iterator>equal_range (const key_type& k);

引數

  • k - 表示要搜尋的鍵。

返回值

此函式返回一對迭代器。

示例

讓我們看下面的例子,我們將演示 equal_range() 函式的基本用法。

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "A"}, {2, "B"}, {3, "C"}, {3, "D"}};
    auto x = a.equal_range(3);
    std::cout << "Elements with key 3:" << std::endl;
    for (auto y = x.first; y != x.second; ++y) {
        std::cout << y->first << ": " << y->second << std::endl;
    }
    return 0;
}

輸出

以上程式碼的輸出如下:

Elements with key 3:
3: C
3: D

示例

考慮下面的例子,我們將修改範圍內的元素。

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a;
    a.insert({1, "A"});
    a.insert({1, "B"});
    a.insert({2, "Tutorix"});
    auto x = a.equal_range(1);
    for (auto y = x.first; y != x.second; ++y) {
        y->second = "TutorialsPoint";
    }
    for (const auto& pair : a) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    return 0;
}

輸出

以下是以上程式碼的輸出:

1: TutorialsPoint
1: TutorialsPoint
2: Tutorix

示例

在下面的例子中,我們將處理不存在的鍵。

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "apple"}, {2, "banana"}, {2, "blueberry"}};
    auto x = a.equal_range(3);
    if (x.first == x.second) {
        std::cout << "No element found with provided key." << std::endl;
    } else {
        for (auto y = x.first; y != x.second; ++y) {
            std::cout << y->first << ": " << y->second << std::endl;
        }
    }
    return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

No element found with provided key.

示例

以下示例中,我們將刪除範圍內的元素。

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "Hi"}, {1, "Hello"}, {2, "Vanakam"}};
    auto x = a.equal_range(1);
    a.erase(x.first, x.second);
    std::cout << "Elements after erasing :" << std::endl;
    for (const auto& pair : a) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    return 0;
}

輸出

讓我們編譯並執行以上程式,這將產生以下結果:

Elements after erasing :
2: Vanakam
multimap.htm
廣告