一.容器的介绍

  1. map:是关联容器,它存储的是键值对(key-value)形式的数据,其中每个元素都由一个唯一的键和一个值组成。键是按照严格弱序进行排序的,因此可以快速地根据键进行查找。键是唯一的,即不允许重复的键。

  2. set:也是关联容器,存储的是唯一的键,而没有值。它内部会自动对元素进行排序,并且保证元素是唯一的。可以高效地进行查找和插入操作。

  3. unordered_map:是关联容器,类似于map,但它使用哈希表实现,不会对元素进行排序。因此,插入、删除和查找的平均时间复杂度为常数时间O(1)。它适用于需要快速查找的场景,但不需要对键进行排序。

  4. multiset:是关联容器,类似于set,但允许存储重复的键。它内部会对元素进行排序,因此可以高效地进行查找和插入操作。

  5. vector:是动态数组,可以在尾部快速插入和删除元素。它的内存分配是连续的,支持随机访问,但在中间或开头进行插入和删除操作较慢。适用于需要频繁地进行随机访问的场景。

  6. list:是双向链表,可以在任意位置高效地插入和删除元素。它不支持随机访问,但对于大量的插入和删除操作,性能比vector更好。

  7. forward_list:是单向链表,类似于list,但只支持单向遍历和插入操作,删除操作相对较快。它的内存占用更小,适用于对内存要求较高的场景。

二.常用的容器方法

  1. mapmap通常使用红黑树实现,每个节点包含一个键和对应的值,根据键值进行排序。常用函数有:

map<int, string> myMap;

// 插入元素     myMap.insert(make_pair(1, "One"));

//遍历元素      for (const auto& pair : myMap) { std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl; }

// 删除元素     myMap.erase(2);

// 查找元素    map<int, string>::iterator it = myMap.find(2);

// 检查键的次数   myMap.count(key)

 

  1. setset通常使用红黑树实现,每个节点只包含一个键,根据键值进行排序。常用函数有:

 

    • insert:插入元素。
    • erase:删除元素。
    • find:查找元素。
  1. unordered_mapunordered_map通常使用哈希表实现,每个节点包含一个键和对应的值,不会进行排序,可以高效地进行查找、插入和删除操作。常用函数有:

    • insert:插入元素。
    • erase:删除元素。
    • find:查找元素。
    • operator[]:通过键值访问元素。
  2. multisetmultiset通常使用红黑树实现,每个节点包含一个键,允许存储重复的键,根据键值进行排序。常用函数与set相同。

  3. vectorvector通常使用动态数组实现,可以在尾部快速插入和删除元素。常用函数有:

    • push_back:在尾部插入元素。
    • pop_back:删除尾部元素。
    • insert:在指定位置插入元素。
    • erase:删除指定位置的元素。
    • size:返回元素个数。
    • operator[]:通过下标访问元素。
  4. listlist通常使用双向链表实现,可以在任意位置高效地插入和删除元素。常用函数有:

    • push_back:在尾部插入元素。
    • push_front:在头部插入元素。
    • pop_back:删除尾部元素。
    • pop_front:删除头部元素。
    • insert:在指定位置插入元素。
    • erase:删除指定位置的元素。
    • size:返回元素个数。
  5. forward_listforward_list通常使用单向链表实现,只支持单向遍历和插入操作。常用函数有:

    • push_front:在头部插入元素。
    • pop_front:删除头部元素。
    • insert_after:在指定位置后面插入元素。
    • erase_after:删除指定位置后面的元素。
    • size:返回元素个数。