C++ unordered_set::emplace_hint() 函式



C++ 的 std::unordered_set::emplace_hint() 函式用於插入新元素,使用提示或位置作為建議,指示元素在 unordered_set 中的存放位置(如果其值唯一),並使容器大小增加一。

此函式允許在給定位置插入新元素,同時避免不必要的複製或移動操作。只有當元素不存在於 unordered_set 容器中時,才能插入該元素。

語法

以下是 std::unordered_set::emplace_hint() 函式的語法。

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

引數

  • position − 指定位置的提示。
  • element − 指示傳遞給建構函式的引數。

返回值

如果元素不存在於 unordered_set 中,則此函式返回指向插入元素的迭代器。否則,它返回指向已存在元素的迭代器。

示例 1

讓我們來看下面的例子,我們將演示 unordered_set::emplace_hint() 函式的使用。

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

int main () {
   unordered_set<string> myUset;

   myUset.emplace_hint(myUset.begin(), "kittu");
   myUset.emplace_hint(myUset.begin(), "prasad");
   myUset.emplace_hint(myUset.begin(), "sairamkrishna");

   cout << "myUset containing:";
   for (const string& x: myUset) cout << "\n" << x;

   cout << endl;
   return 0;
}

輸出

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

myUset containing:
sairamkrishna
prasad
kittu

示例 2

考慮下面的例子,我們將使用 emplace_hint() 函式並在給定位置插入元素。

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

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

   myUset.emplace_hint(myUset.end(), 10);
   myUset.emplace_hint(myUset.begin(), 40);
   myUset.emplace_hint(myUset.end(), 50);

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

輸出

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

myUset containing: 50 40 20 10

示例 3

在下面的例子中,我們將使用 emplace_hint() 函式在給定位置插入元素,並檢查我們是否可以插入已存在的元素。

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

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

   myUset.emplace_hint(myUset.end(), 30);
   myUset.emplace_hint(myUset.end(), 40);

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

輸出

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

myUset containing: 40 30 20 10

示例 4

下面的例子中,我們將考慮 char 型別的 unordered_set,並使用 emplace_hint() 函式在開頭插入元素。

#include <iostream>
#include <unordered_set>
using namespace std;
 
int main (){
   unordered_set<char> myUset{'a', 'b', 'c', 'd'}; 
   unordered_set<char>::iterator it;

   it = myUset.begin();
   myUset.emplace_hint(it, 'e');
   it = myUset.emplace_hint(myUset.end(), 'f');

   cout<<"myUset contains: ";
   for(it = myUset.begin(); it != myUset.end(); ++it)
      cout<<*it<<" ";

   return 0;
}

輸出

上述程式碼的輸出如下:

myUset contains: f e d c b a 
廣告