C++ STL中的multimap::swap()

C++ STL中的multimap::swap()

C++ STL中,multimap是一个非常有用的容器,它允许存储键值对,且允许相同键值对的存在。multimap::swap()函数是C++ STL中multimap容器的交换函数,它可以使两个multimap容器在O(1)时间内互换内容。

multimap容器及其操作

multimap容器是一种关联式容器,它可以存储一个键值对表。multimap容器没有影响存储在其中的元素的任何顺序,因此您可以根据它们的键值对它们按任何顺序提取和访问。与map容器一样,multimap容器中也可以包含多个相同的键值对。

multimap容器定义的方式如下:

// multimap容器定义
multimap <typename T, typename U> name;

multimap容器可以使用insert()成员函数来插入元素,可以使用find()成员函数来查找元素,也可以使用erase()成员函数来删除元素。

插入元素

在multimap容器中,可以使用insert()成员函数来插入键值对。这个成员函数有几种不同的方式,可以接受键值对、迭代器对或初始化列表。

以下是向multimap容器中插入元素的示例代码:

// multimap容器插入元素
#include <iostream>
#include <map>

int main() {
    std::multimap <int, char> m;

    m.insert(std::make_pair(1, 'a'));
    m.insert(std::make_pair(2, 'b'));
    m.insert(std::make_pair(3, 'c'));
    m.insert(std::make_pair(3, 'd'));

    std::multimap <int, char>::iterator itr;
    std::cout << "Multimap contains:\n";
    for (itr = m.begin(); itr != m.end(); ++itr) {
        std::cout << itr->first << "->" << itr->second << '\n';
    }

    return 0;
}

输出:

Multimap contains:
1->a
2->b
3->c
3->d

查找元素

在multimap容器中,可以使用find()成员函数来查找元素。find()函数返回指向第一个具有给定键的元素的迭代器,如果没有找到,则返回容器的end()位置。

以下是在multimap容器中查找元素的示例代码:

// multimap容器查找元素
#include <iostream>
#include <map>

int main() {
    std::multimap <int, char> m;

    m.insert(std::make_pair(1, 'a'));
    m.insert(std::make_pair(2, 'b'));
    m.insert(std::make_pair(3, 'c'));
    m.insert(std::make_pair(3, 'd'));

    std::multimap <int, char>::iterator itr;
    itr = m.find(3);
    std::cout << "Elements with key 3:\n";
    std::cout << itr->first << "->" << itr->second << '\n';

    return 0;
}

输出:

Elements with key 3:
3->c

删除元素

在multimap容器中,可以使用erase()成员函数来删除键值对。这个成员函数接受一个迭代器(指向要删除的元素)或一对迭代器(指定要删除的元素的范围)。

以下是从multimap容器中删除元素的示例代码:

// multimap容器删除元素
#include <iostream>
#include <map>

int main() {
    std::multimap <int, char> m;

    m.insert(std::make_pair(1, 'a'));
    m.insert(std::make_pair(2, 'b'));
    m.insert(std::make_pair(3, 'c'));
    m.insert(std::make_pair(3, 'd'));

    std::cout << "Multimap before erase:\n";
    for (auto const& pair: m) {
        std::cout << pair.first << "->" << pair.second << '\n';
    }

    std::multimap <int, char>::iterator itr;
    itr = m.find(3);
    m.erase(itr);

    std::cout << "Multimap after erase:\n";
    for (auto const& pair: m) {
        std::cout << pair.first << "->" << pair.second << '\n';
    }

    return 0;
}

输出:

Multimap before erase:
1->a
2->b
3->c
3->d
Multimap after erase:
1->a
2->b
3->d

multimap::swap()函数

multimap::swap()函数是C++ STL中multimap容器的交换函数,它将两个multimap容器的内容互换,使得容器1中的内容存储在容器2中,容器2中的内容存储在容器1中。

注意,multimap::swap()函数不会复制任何元素,只是交换了两个容器的指针,因此它是一个非常快速的操作。此外,multimap::swap()函数不会影响任何迭代器、引用或指向交换后容器中的元素的指针。

以下是使用multimap::swap()函数交换multimap容器的示例代码:

// multimap容器交换
#include <iostream>
#include <map>

int main() {
    std::multimap <int, char> m1;
    std::multimap <int, char> m2;

    m1.insert(std::make_pair(1, 'a'));
    m1.insert(std::make_pair(2, 'b'));

    m2.insert(std::make_pair(3, 'c'));
    m2.insert(std::make_pair(4, 'd'));

    std::cout << "Multimap 1 contains:\n";
    for (auto const& pair: m1) {
        std::cout << pair.first << "->" << pair.second << '\n';
    }

    std::cout << "Multimap 2 contains:\n";
    for (auto const& pair: m2) {
        std::cout << pair.first << "->" << pair.second << '\n';
    }

    m1.swap(m2);

    std::cout << "After swap:\n";
    std::cout << "Multimap 1 contains:\n";
    for (auto const& pair: m1) {
        std::cout << pair.first << "->" << pair.second << '\n';
    }

    std::cout << "Multimap 2 contains:\n";
    for (auto const& pair: m2) {
        std::cout << pair.first << "->" << pair.second << '\n';
    }

    return 0;
}

输出:

Multimap 1 contains:
1->a
2->b
Multimap 2 contains:
3->c
4->d
After swap:
Multimap 1 contains:
3->c
4->d
Multimap 2 contains:
1->a
2->b

结论

multimap::swap()函数是C++ STL中multimap容器的交换函数,它将两个multimap容器的内容互换,使得容器1中的内容存储在容器2中,容器2中的内容存储在容器1中。multimap::swap()函数不会复制任何元素,只是交换了两个容器的指针,因此它是一个非常快速的操作。此外,multimap::swap()函数不会影响任何迭代器、引用或指向交换后容器中的元素的指针。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程