C++ multimap::emplace_hint() 函数



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

语法

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

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

参数

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

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

返回值

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

异常

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

时间复杂度

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

示例

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

Open Compiler
#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() 函数进行范围插入。

Open Compiler
#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()。

Open Compiler
#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
广告