function template
<map>
std::swap (multimap)
template <class Key, class T, class Compare, class Alloc>
void swap (multimap<Key,T,Compare,Alloc>& x, multimap<Key,T,Compare,Alloc>& y);
Exchanges the contents of two multimaps
The contents of container x are exchanged with those of y. Both container objects must be of the same type (same template parameters), although sizes may differ.
After the call to this member function, the elements in x are those which were in y before the call, and the elements of y are those which were in x. All iterators, references and pointers remain valid for the swapped objects.
This is an overload of the generic algorithm swap that improves its performance by mutually transferring ownership over their assets to the other container (i.e., the containers exchange references to their data, without actually performing any element copy or movement): It behaves as if x.swap(y) was called.
Parameters
- x,y
- multimap containers of the same type (i.e., having both the same template parameters: Key, T, Compare and Alloc).
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
// swap multimaps
#include <iostream>
#include <map>
int main ()
{
std::multimap<char,int> foo,bar;
foo.insert(std::make_pair('x',100));
foo.insert(std::make_pair('y',200));
bar.insert(std::make_pair('a',11));
bar.insert(std::make_pair('b',22));
bar.insert(std::make_pair('a',55));
swap(foo,bar);
std::cout << "foo contains:\n";
for (std::multimap<char,int>::iterator it=foo.begin(); it!=foo.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
std::cout << "bar contains:\n";
for (std::multimap<char,int>::iterator it=bar.begin(); it!=bar.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
return 0;
}
|
Output:
foo contains:
a => 11
a => 55
b => 22
bar contains:
x => 100
y => 200
|
Iterator validity
All iterators, pointers and references referring to elements in both containers remain valid, and are now referring to the same elements they referred to before the call, but in the other container, where they now iterate.
Note that the end iterators do not refer to elements and may be invalidated.
Data races
Both containers, x and y, are modified.
No contained elements are accessed by the call (although see iterator validity above).
Exception safety
If the allocators in both multimaps compare equal, or if their allocator traits indicate that the allocators shall propagate, the function never throws exceptions (no-throw guarantee).
Otherwise, it causes undefined behavior.
See also
- multimap::swap
- Swap content (public member function
)
- swap
- Exchange values of two objects (function template
)
- swap_ranges
- Exchange values of two ranges (function template
)