📜  C++ 中的序列与关联容器(1)

📅  最后修改于: 2023-12-03 14:39:54.670000             🧑  作者: Mango

C++ 中的序列与关联容器

序列容器

序列容器是C++中常用的数据结构之一,由一组能够管理大小可变的连续元素的类组成。序列容器的基本操作包括在特定位置插入或删除元素、访问特定位置的元素以及遍历序列中的每一个元素。

以下是常见的序列容器:

vector

vector 是 C++ 中最常用的容器类型之一,它是一种通过动态数组实现的序列容器。vector 支持快速的随机访问和尾部插入/删除,但在中间插入/删除元素时效率较低。

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> v{1, 2, 3};
    v.push_back(4); // 在末尾插入元素
    v.pop_back(); // 删除末尾元素
    v.insert(v.begin()+1, 5); // 在第二个位置插入元素
    v.erase(v.begin()+2); // 删除第三个元素

    for (auto i : v)
    {
        std::cout << i << " ";
    }

    return 0;
}
list

list 是另一种常用的序列容器,它通过双向链表实现,支持快速的元素插入/删除,但不支持随机访问。

#include <list>
#include <iostream>

int main()
{
    std::list<int> l{1, 2, 3};
    l.push_back(4); // 在末尾插入元素
    l.pop_front(); // 删除头部元素
    l.insert(l.begin(), 5); // 在头部插入元素
    l.erase(l.begin()+2); // 删除第三个元素

    for (auto i : l)
    {
        std::cout << i << " ";
    }

    return 0;
}
deque

deque 是一种双端队列,支持在队头和队尾进行插入和删除,而且支持快速的随机访问。

#include <deque>
#include <iostream>

int main()
{
    std::deque<int> d{1, 2, 3};
    d.push_back(4); // 在末尾插入元素
    d.push_front(5); // 在头部插入元素
    d.pop_back(); // 删除末尾元素
    d.pop_front(); // 删除头部元素

    for (auto i : d)
    {
        std::cout << i << " ";
    }

    return 0;
}
关联容器

关联容器是一种按照键值有序存储和访问元素的容器,它提供了一组能够管理特定数据类型的键值对的类。关联容器的基本操作包括添加和删除元素、查找特定键值对应的元素以及遍历容器中的每一个元素。

以下是常见的关联容器:

set

set 是一种按照键值有序存储元素的容器,不支持重复元素。set 中的元素默认按照键值递增的顺序存储,可以使用自定义的比较函数来改变排序方式。

#include <set>
#include <iostream>

int main()
{
    std::set<int> s{1, 2, 3};
    s.insert(4);
    s.erase(3);

    for (auto i : s)
    {
        std::cout << i << " ";
    }

    return 0;
}
map

map 是一种按照键值有序存储元素的容器,每个元素是一个键值对,支持快速查找特定键值的元素。map 中的元素默认按照键值递增的顺序存储,可以使用自定义的比较函数来改变排序方式。

#include <map>
#include <iostream>

int main()
{
    std::map<std::string, int> m{{"one", 1}, {"two", 2}, {"three", 3}};
    m.insert({"four", 4});
    m.erase("two");

    for (auto i : m)
    {
        std::cout << i.first << ": " << i.second << std::endl;
    }

    return 0;
}
unordered_set

unordered_set 是一种不保证元素有序存储的容器,支持快速查找特定元素。unordered_set 中的元素不支持重复,且不保证顺序。

#include <unordered_set>
#include <iostream>

int main()
{
    std::unordered_set<int> s{1, 2, 3};
    s.insert(4);
    s.erase(3);

    for (auto i : s)
    {
        std::cout << i << " ";
    }

    return 0;
}
unordered_map

unordered_map 是一种不保证元素有序存储的容器,每个元素是一个键值对,支持快速查找特定键值的元素。unordered_map 中的元素不支持重复,且不保证顺序。

#include <unordered_map>
#include <iostream>

int main()
{
    std::unordered_map<std::string, int> m{{"one", 1}, {"two", 2}, {"three", 3}};
    m.insert({"four", 4});
    m.erase("two");

    for (auto i : m)
    {
        std::cout << i.first << ": " << i.second << std::endl;
    }

    return 0;
}