1.set和multiset的区别
set和multiset两者的底层结构都是RB-tree,两者唯一的区别是使用的insert()函数不同,set中不允许存在重复的元素,所以底层使用的插入元素函数为insert_unique();而multiset中运行存在重复元素,所以底层使用的插入元素函数为insert_equal().
2.map和multimap的区别
同set和multiset的区别。
3.hash_set和set的区别
hash_set和set的区别在于两者的底层结构不一样,hash_set的底层采用的是hashtable,而set的底层采用的是RB-tree。
4.hash_map和map的区别
同hash_set和set的区别。
5.hash_set和hash_multiset的区别
这两者底层结构都是hashtable,唯一的区别同set和multiset的区别,就是一个不存在重复元素,而hash_multiset运行存在重复元素。
注:有一种错误的理解,从名字上看,有人会认为hash_set是hashtable+set的组合,即hashtable解决冲突的方法是使用开链法,此时将开链中的节点以RB-tree的形式组织起来。这是错误的理解。hash_set本质就是hashtable的一个封装。虽然这是一种对hash_set错误的想法,但是可以作为一种新的结构来思考。