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.
廣告