算法竞赛STL:map的使用方法
map
容器描述 : map
是一种关联容器,它存储的元素是键值对,键和值可以是任意类型。map
内部的元素按照键的顺序进行排序,排序的规则由比较函数决定。
使用方法 : 首先,你需要包含头文件#include <map>
,然后声明一个map
对象,如std::map<int, std::string> m;
。这将创建一个键为整数、值为字符串的map
。
底层实现 : map
的底层通常实现为红黑树。红黑树是一种自平衡的二叉查找树,它可以在对数时间内完成查找、插入和删除操作。
支持操作:
操作名 | 效果 | 传入参数 | 操作返回值 |
---|---|---|---|
insert(const pair<const Key, T>& value) |
插入一个键值对 | value: 要插入的键值对 | 返回一个pair,第一个元素是指向新插入元素的迭代器,第二个元素是一个bool值,如果插入成功,返回true;否则,返回false |
erase(iterator pos) |
删除指定位置的元素 | pos: 要删除元素的位置 | 返回被删除元素之后元素的迭代器 |
erase(const Key& key) |
删除键为给定值的元素 | key: 要删除的元素的键 | 返回被删除的元素的数量 |
clear() |
删除所有元素 | 无 | 无 |
find(const Key& key) |
查找键为给定值的元素 | key: 要查找的元素的键 | 如果找到,返回指向该元素的迭代器;否则,返回end() |
count(const Key& key) |
返回键为给定值的元素的数量 | key: 要查找的元素的键 | 返回元素的数量,对于map来说,返回值只能是0或1 |
empty() |
检查map是否为空 | 无 | 如果map为空,返回true;否则,返回false |
size() |
返回map中的元素数量 | 无 | 返回元素数量 |
operator[] |
访问或插入指定键的元素 | key: 元素的键 | 返回指定键的元素的引用 |
常用示例:
cpp
#include <map>
#include <iostream>
int main() {
std::map<int, std::string> m;
m[1] = "one";
m[2] = "two";
for (auto it = m.begin(); it != m.end(); ++it) {
std::cout << it->first << " => " << it->second << std::endl;
}
return 0;
}
经常产生的问题:
map
的插入操作可能会改变map中其他元素的迭代器,因此在遍历map的同时插入元素是不安全的。map
的operator[]
操作如果找不到指定的键,会插入一个具有该键和默认值的元素。