# 概述

multiset (多重集) 是 C++ STL 中的一种容器,底层基于红黑树实现。使用时需要引入头文件 <set> .

# 声明

multiset 默认采用升序排列,声明方式为

multiset<int> set;
multiset<int, less<int>> set; // equals to this

如果希望以降序排列,则其声明如下:

multiset<int, greater<int>> set2;

事实上,其完整声明为:

template<class Key, class Compare = std::less<key>, class Allocator>

一个自定义并使用比较类的示例为:

比较类范例
struct point{
    double x, y;
};
class cmp{
    bool operator()(const struct point &a, const struct point &b) {
        return (a.x<b.x)?true:((a.x>b.x)?false:(a.y<b.y)?true:false);
    }
};
vector<point> vec1;
//...
sort(vec1.begin(), vec1.end(), cmp());

# 迭代器

multiset 底层为双向迭代器,支持 ++-- , 但不支持 +- .

# 基本函数

以下函数都是定义为 multiset 类的成员函数,即需要通过 multiset1.func(val) 调用。

函数作用
insert(val)插入可重复元素
erase(val)删除全部 val 值元素
erase(it1, it2)删除两个迭代器之间的全部元素,不包括 it2 指向的元素
find(val)返回值为 val 的第一个元素,不存在则返回 end()
lower_bound(val)返回值大于等于 val 的第一个元素,不存在则返回 end()
upper_bound(val)返回值大于 val 的第一个元素,不存在则返回 end()
count(val)返回值为 val 的元素个数
clear()清空 multiset
swap(set2)将两个 multiset 交换

# Reference

  • CSDN: multiset 用法详解