公有成员函数
<map>

std::multimap::swap

void swap (multimap& x);
交换内容
交换容器的内容与 x 的内容,x 是另一个相同类型的 multimap。大小可能不同。

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

请注意,存在一个同名的非成员函数 swap,它通过优化重载了该算法,该优化行为类似于此成员函数。

内部容器的 分配器比较对象 是否被交换是未定义的。
内部容器的 分配器 是否被交换未定义,除非在适当的 分配器特性 明确指示它们应该 传播 的情况下。

内部 比较对象 总是通过 swap 进行交换。

参数

x
另一个与此容器类型相同的 multimap 容器(即具有相同的模板参数,, 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
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));

  foo.swap(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;
}

输出
foo contains:
a => 11
a => 55
b => 22
bar contains:
x => 100
y => 200


复杂度

常量。

迭代器有效性

指向两个容器中元素的的所有迭代器、指针和引用仍然有效,但现在指向另一个容器中的元素,并在其中迭代。
请注意,end 迭代器 不指向元素,并且可能失效。

数据竞争

容器和 x 都被修改。
调用不会访问任何包含的元素(尽管请参见上文的迭代器有效性)。

异常安全

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

另见