multimap
multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。
///1. 初始化
multimap<int, string> mapStudent;
multimap<int, string>::iterator iter, beg, end;
///2. 添加元素
///multimap不支持下标操作
mapStudent.insert(pair<int, string>(0, "student_one"));
mapStudent.insert(pair<int, string>(0, "student_one_copy"));///一对多
int count = mapStudent.count(0); //
iter = mapStudent.find(0);
for (int i = 0; i < count; i++, iter++) //相同键的元素相邻排放
cout << iter->first << " " << iter->second << endl;
cout << endl;
multiset(多元集合)
多元集合(multiset)和集合(set)所支持的操作相同,只不过支持重复对象。
multiset是库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。
总结:
Vector是顺序容器,是一个动态数组,支持随机存取、插入、删除、查找等操作,在内存中是一块连续的空间。在原有空间不够情况下自动分配空间,增加为原来的两倍。vector随机存取效率高,但是在vector插入元素,需要移动的数目多,效率低下。
map set容器的底层实现为红黑树(二叉树),以红黑树的结构实现,插入删除等操作都在O(logn)时间内完成。
unordered_map,unordered_set的底层实现用哈希函数组织,根据其哈希值组织到桶中,以允许通过键值直接快速访问各个元素(常量的平均时间复杂度)即O(1)。