C++ unordered_set::emplace() 函数



C++ 的 std::unordered_set::emplace() 函数用于在 unordered_set 中插入一个新元素,前提是该元素的值是唯一的。只有当元素不存在于 unordered_set 中时,才会进行插入操作。调用此函数时,它会插入一个新元素,避免不必要的复制或移动操作。

语法

以下是 std::unordered_set::emplace() 函数的语法。

pair <iterator,bool> emplace ( Args&&... args );

参数

  • args − 表示传递给构造函数的参数。

返回值

此函数返回一个元素和布尔值对。如果函数成功插入元素,则返回一个包含新插入元素的迭代器和布尔值 true 的对。如果要插入的元素已存在于 unordered_set 中,则返回一对指向已存在元素的迭代器和布尔值 false。

示例 1

让我们看下面的例子,我们将演示 unordered_set::emplace() 函数的使用。

#include <iostream>
#include <string>
#include <unordered_set>

int main () {
   std::unordered_set<std::string> myset;

   myset.emplace ("kittu");
   myset.emplace ("prasad");
   myset.emplace ("sairamkrishna");

   std::cout << "myset containing:";
   for (const std::string& x: myset) std::cout << " " << x;

   std::cout << std::endl;
   return 0;
}

输出

让我们编译并运行上面的程序,这将产生以下结果:

myset containing: sairamkrishna prasad kittu

示例 2

考虑下面的例子,我们将使用 emplace() 函数并插入不存在于 unordered_set 中的元素。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<int> myUset={10, 20};

   myUset.emplace (30);
   myUset.emplace (40);
   myUset.emplace (50);

   cout << "myUset containing:";
   for (const int& x: myUset)
      cout << " " << x;
   cout << endl;
   return 0;
}

输出

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

myUset containing: 50 40 30 20 10

示例 3

在下面的例子中,我们将使用 emplace() 函数插入已存在于 unordered_set 中的元素,并观察输出。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<int> myUset={10, 20, 30, 40};

   myUset.emplace (30);
   myUset.emplace (40);

   cout << "myUset containing:";
   for (const int& x: myUset)
      cout << " " << x;
   cout << endl;
   return 0;
}

输出

以下是上述代码的输出:

myUset containing: 40 30 20 10

示例 4

下面的例子中,我们将使用 emplace() 函数将元素插入到 unordered_set 中,如果元素存在于 unordered_set 中,则不会进行任何更改。

#include <iostream>
#include <unordered_set>
using namespace std;
 
int main (){
   unordered_set<int> myUset{10, 20, 30};
 
   auto Insert = myUset.emplace(40);
   if(!Insert.second) 
      cout<<"40 is already present in myUset.\n";
   else
      cout<<"40 is added in myUset.\n";

   Insert = myUset.emplace(20);
   if(!Insert.second) 
      cout<<"20 is already present in myUset.\n";
   else
      cout<<"20 is added in myUset.\n";

   return 0;
}

输出

上述代码的输出如下:

40 is added in myUset.
20 is already present in myUset.
广告