Set、multiset都是集合类, 差别在与set中不允许有重复元素, multiset中允许有重复元素。 sets和multiset内部以平衡二叉树实现。 multiset 多重集合容器是一个可容纳重复元素键值的有序关联容器。 与 set 容器一样,使用红黑树作为容器的内部数据结构,元素的搜索操作都是具有对数级的算法时间复杂度。 它的 find 和 equal_range 函数,可搜索出某一键值下的所有元素位置。
multiset 缺点:和 set 一样,如果 插入、删除 操作频繁了,multiset 就不适合。 multiset 优点:相对于 set ,它能插入重复的元素。当然,它的检索速度也是非常快的。
遍历 multiset 容器元素 multiset<int>::iterator i, iend; iend = ms.end(); for (i=ms.begin(); i!=iend; ++i) cout << *i << ' ';
反向遍历 multiset 容器 multiset<int>::reverse_iterator ri, riend; riend = ms.rend(); for (ri=ms.rbegin(); ri!=riend; ++ri) cout << *ri << ' ';
find 搜索元素 multiset<int>::reverse_iterator ri, riend; riend = ms.rend(); for (ri=ms.rbegin(); ri!=riend; ++ri) cout << *ri << ' ';
equal_range 搜索元素 v = 13; pair<multiset<int>::iterator, multiset<int>::iterator> p = ms.equal_range(v);
重复键值元素 multiset<int>::iterator j; cout << "键值为" << v << "的所有元素为:"; for (j=p.first; j!=p.second; ++j) cout << *j << ' ';