function template
<set>

std::swap (multiset)

template <class T, class Compare, class Alloc>  void swap (multiset<T,Compare,Alloc>& x, multiset<T,Compare,Alloc>& y);
交换两个multiset的内容
容器x的内容与y的内容进行交换。两个容器对象必须是相同的类型(相同的模板参数),但大小可以不同。

调用此成员函数后,x中的元素将变为调用前y中的元素,而y中的元素将变为调用前x中的元素。所有迭代器、引用和指针对于交换后的对象仍然有效。

这是通用算法swap的一个重载,它通过互相转移其资产给对方容器来提高性能(即,容器交换它们数据的引用,而不实际执行任何元素复制或移动):它表现得好像x.swap(y)被调用。

参数

x,y
相同类型的multiset容器(即,具有相同的模板参数,T, CompareAlloc).

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// swap (multiset overload)
#include <iostream>
#include <set>

main ()
{
  int myints[]={12,75,12,35,20,35};
  std::multiset<int> first (myints,myints+3);     // 12,12,75
  std::multiset<int> second (myints+3,myints+6);  // 20,35,35

  swap(first,second);

  std::cout << "first contains:";
  for (std::multiset<int>::iterator it=first.begin(); it!=first.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  std::cout << "second contains:";
  for (std::multiset<int>::iterator it=second.begin(); it!=second.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出
first contains: 20 35 35
second contains: 12 12 75


复杂度

常量。

迭代器有效性

指向两个容器中元素的的所有迭代器、指针和引用仍然有效,并且现在指向调用前它们所指向的相同元素,只是在另一个容器中,它们现在进行迭代。
请注意,end迭代器不指向元素,并且可能会失效。

数据竞争

两个容器xy都会被修改。
调用时不会访问任何包含的元素(但请参阅上面的迭代器有效性)。

异常安全

如果两个multiset中的分配器比较相等,或者它们的分配器特性指示分配器应传播,则该函数永远不会抛出异常(无异常保证)。
否则,将导致未定义行为

另见