map 和 set 都是 C++的关联容器,其底层实现都是红黑树(RB-Tree)。
由于 map 和 set 所
开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和 set 的操作行为,都只是
转调 RB-tree 的操作行为。
map 和 set 区别在于:
(1)map 中的元素是 key-value(关键字—值)对:关键字起到索引的作用,值则表示与索
引相关联的数据;Set 与之相对就是关键字的简单集合,set 中每个元素只包含一个关键字。
(2)set 的迭代器是 const 的,不允许修改元素的值;map 允许修改 value,但不允许修改
key。其原因是因为 map 和 set 是根据关键字排序来保证其有序性的,如果允许修改 key 的话,
那么首先需要删除该键,然后调节平衡,再插入修改后的键值,调节平衡,如此一来,严重破坏
了 map 和 set 的结构,导致 iterator 失效,不知道应该指向改变前的位置,