The C++ multiset swap(multiset) function is an external function for multiset in C++. Its purpose is to exchange the elements between two multisets, x and y, provided they are of the same type, even if their sizes are different.
Syntax
template <class T, class Compare, class Allocator>
void swap (multiset<T,Compare,Allocator>& x, multiset<T,Compare,Allocator>& y);
Parameter
x : First multiset object.
y : Second multiset object of the same type.
Return value
Complexity
Constant.
Iterator validity
All iterators, references, and pointers pointing to elements within both containers will stay valid.
Note that the final iterators do not point to elements and may become invalid.
Data Races
Both containers x and y are modified.
No contained elements are accessed by the call.
Exception Safety
This function does not throw an exception.
Example 1
Let's examine a straightforward example of swapping elements between two multisets:
#include <iostream>
#include <set>
using namespace std;
int main(void) {
multiset<char> m1 = {'a','b','b','d'};
multiset<char> m2;
swap(m1, m2);
cout << "Multiset contains following elements" << endl;
for (auto it = m2.begin(); it != m2.end(); ++it)
cout << *it<< endl;
return 0;
}
Output:
Multiset contains following elements
a
b
b
d
In the given scenario, the multiset m1 contains five elements while m2 is currently empty. Upon swapping the contents of m1 with m2, all the elements originally present in m1 will be transferred to m2.
Example 2
Let's examine a basic illustration of swapping the elements of two multisets:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
multiset<int> multiset1,multiset2;
multiset1= {100,200,100};
multiset2 = {110, 220, 330};
swap(multiset1,multiset2);
cout << "multiset1 contains:\n";
for (multiset<int>::iterator it=multiset1.begin(); it!=multiset1.end(); ++it)
cout << *it<< '\n';
cout << "multiset2 contains:\n";
for (multiset<int>::iterator it=multiset2.begin(); it!=multiset2.end(); ++it)
cout << *it<< '\n';
return 0;
}
Output:
multiset1 contains:
110
220
330
multiset2 contains:
100
100
200
In the provided example, the elements of two multisets, namely multiset1 and multiset2, are swapped with each other.
Example 3
Let's consider a basic illustration to exchange the elements of two multisets:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
int myints[]={12,75,10,17,20,17};
multiset<int> first (myints,myints+3);
multiset<int> second (myints+3,myints+6);
swap(first,second);
cout << "first contains:";
for (multiset<int>::iterator it=first.begin(); it!=first.end(); ++it)
cout << ' ' << *it;
cout << '\n';
cout << "second contains:";
for (multiset<int>::iterator it=second.begin(); it!=second.end(); ++it)
cout << ' ' << *it;
cout << '\n';
return 0;
}
Output:
first contains: 17 17 20
second contains: 10 12 75
Example 4
Let's see a simple example:
#include <iostream>
#include <string>
#include <set>
using namespace std;
void show(const char *msg, multiset<int> mp);
int main() {
multiset<int> m1, m2;
m1.insert(100);
m1.insert(300);
m1.insert(100);
// Exchange the contents of m1 and m2.
cout << "Exchange m1 and m2.\n";
swap(m1,m2);
show("Contents of m2: ", m2);
show("Contents of m1: ", m1);
// Clear m1.
m1.clear();
if(m1.empty()) cout << "m1 is now empty.";
return 0;
}
// Display the contents of a multiset<string, int> by using an iterator.
void show(const char *msg, multiset<int> mp) {
multiset<int>::iterator itr;
cout << msg << endl;
for(itr=mp.begin(); itr != mp.end(); ++itr)
cout << " " << *itr<< endl;
cout << endl;
}
Output:
Exchange m1 and m2.
Contents of m2:
100
100
300
Contents of m1:
m1 is now empty.
After transferring the elements from multiset m1 to multiset m2, multiset m1 is subsequently emptied.