C++ multimap::emplace_hint() 函数



C++ 的std::multimap::emplace_hint()函数允许插入具有指定位置提示的元素,避免不必要的查找。如果基于提供的参数,目标位置不存在,它会在提示的位置就地构造元素。此方法有助于维护排序顺序并最大限度地减少插入期间的比较次数。

语法

以下是 std::multimap::emplace_hint() 函数的语法。

iterator emplace_hint (const_iterator position, Args&&... args);

参数

  • position − 指示插入元素的位置提示。
  • args − 用于构造新元素的转发参数。

返回值

此函数返回指向新插入元素的迭代器。

异常

如果抛出异常,它不会对容器进行任何更改。

时间复杂度

此函数的时间复杂度是对数的,即 O(log n)

示例

让我们来看下面的例子,我们将演示 emplace_hint() 函数的基本用法。

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

输出

以上代码的输出如下:

1: Hi
1: Namaste
2: Hello

示例

考虑下面的例子,我们将使用 emplace_hint() 函数进行范围插入。

#include <iostream>
#include <map>
int main()
{
    std::multimap<int, std::string> a = {{1, "Audi"}, {2, "BMW"}};
    std::multimap<int, std::string> b = {{1, "Ciaz"}, {3, "Ducati"}};
    auto x = a.begin();
    for (const auto& pair : b) {
        x = a.emplace_hint(x, pair.first, pair.second);
    }
    for (const auto& pair : a) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    return 0;
}

输出

以下是以上代码的输出:

1: Ciaz
1: Audi
2: BMW
3: Ducati

示例

在下面的例子中,我们将使用带有移动语义的 emplace_hint()。

#include <iostream>
#include <map>
#include <utility>
int main()
{
    std::multimap<int, std::string> a = {{1, "TP"}, {2, "TutorialsPoint"}};
    auto x = a.end();
    std::string y = "Tutorix";
    x = a.emplace_hint(x, 3, std::move(y));
    for (const auto& pair : a) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    return 0;
}

输出

如果我们运行以上代码,它将生成以下输出:

1: TP
2: TutorialsPoint
3: Tutorix
multimap.htm
广告
© . All rights reserved.