C++ unordered_map::swap() 函式



C++ 的std::unordered_map::swap()函式用於交換第一個unordered_map與另一個unordered_map的內容。當兩個unordered_map的元素型別相同時,就會發生交換。

此函式不依賴於大小。如果兩個unordered_map具有相同的型別,它將完美地交換unordered_map的元素,無論大小是否相同。

語法

以下是非成員std::unordered_map::swap()函式的語法。

void swap( unordered_map<Key,T,Hash,Pred,Alloc>& first,
           unordered_map<Key,T,Hash,Pred,Alloc>& second);

引數

  • first - 第一個unordered_map物件。
  • second - 第二個相同型別的unordered_map物件。

返回值

此函式不返回任何內容。

示例 1

在以下示例中,我們將對兩個容器進行交換,一個是包含元素的,另一個是空的。

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<char, int> um1 = {
      {'a', 1},
      {'b', 2},
      {'c', 3},
      {'d', 4},
      {'e', 5}
   };
   unordered_map<char, int> um2;
   swap(um1, um2);
   cout << "Unordered map contains following elements" << endl;
   for (auto it = um2.begin(); it != um2.end(); ++it)
      cout << it->first << " = " << it->second << endl;
   return 0;
}

輸出

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

Unordered map contains following elements
e = 5
a = 1
b = 2
c = 3
d = 4

示例 2

考慮另一種情況,我們將使兩個unordered_map相互交換。

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<char, int> um1 = {
      {'a', 1},
      {'b', 2},
      {'c', 3},
      {'d', 4},
      {'e', 5}
   };
   unordered_map<char, int> um2 = {
      {'A', 1},
      {'B', 2},
      {'C', 3},
      {'D', 4}
   };
   cout << "um1 contains following elements before swapping: " << endl;
   for (auto it = um1.begin(); it != um1.end(); ++it)
      cout << it->first << " = " << it->second << endl;
   
   cout << "um2 contains following elements before swapping: " << endl;
   for (auto it = um2.begin(); it != um2.end(); ++it)
      cout << it->first << " = " << it->second << endl;
      
   swap(um1, um2);
   
   cout << "um1 contains following elements after swapping: " << endl;
   for (auto it = um1.begin(); it != um1.end(); ++it)
      cout << it->first << " = " << it->second << endl;
   
   cout << "um2 contains following elements after swapping: " << endl;
   for (auto it = um2.begin(); it != um2.end(); ++it)
      cout << it->first << " = " << it->second << endl;
      
   return 0;
}

輸出

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

um1 contains following elements before swapping: 
e = 5
d = 4
c = 3
b = 2
a = 1
um2 contains following elements before swapping: 
D = 4
C = 3
B = 2
A = 1
um1 contains following elements after swapping: 
D = 4
C = 3
B = 2
A = 1
um2 contains following elements after swapping: 
e = 5
d = 4
c = 3
b = 2
a = 1

示例 3

讓我們看下面的例子,我們將建立兩個unordered_map,John和Bob,它們儲存科目的分數,現在我們將John和Bob的分數互相交換。

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<string, int> John = {
      {"CHE", 85},
      {"PHY", 88},
      {"MAT", 99},
      {"CMS", 86},
      {"ENG", 95}
   };
   unordered_map<string, int> Bob = {
      {"PHY", 90},
      {"CHE", 82},
      {"MAT", 98},
      {"CMS", 88}
   };
   cout<<"Swapping the marks of first unordered map with second unordered_map"<<endl;
   
   swap(John, Bob);
   
   cout <<"John contains following marks after swapping: " << endl;
   for (auto & it: John)
      cout << it.first << " = " << it.second << endl;
   
   cout <<"Bob contains following marks after swapping: " << endl;
   for (auto & it:  Bob)
      cout << it.first << " = " << it.second << endl;
   return 0;
}

輸出

上述程式碼的輸出如下:

Swapping the marks of first unordered map with second unordered_map
john contains following marks after swapping: 
CMS = 88
MAT = 98
CHE = 82
PHY = 90
Bob contains following marks after swapping: 
ENG = 95
CMS = 86
MAT = 99
PHY = 88
CHE = 85
廣告