Cpp中muliset
时间: 2023-09-03 21:15:00 浏览: 42
`std::multiset` 是一个容器,它允许存储多个相同的元素,且元素按照一定的顺序(默认为升序)排列。它是一个红黑树(一种自平衡二叉搜索树)实现的容器。在 `std::multiset` 中,插入元素时会自动根据元素的值进行排序,因此可以使用 `std::multiset` 来实现一些需要元素有序存储的场景。
与 `std::set` 不同的是,`std::multiset` 中可以存储相同的元素。因此,`std::multiset` 中的元素是不唯一的,但是它们都按照一定的顺序排列。
下面是 `std::multiset` 的一些常见操作:
- `insert`:将元素插入到 `std::multiset` 中。
- `erase`:删除 `std::multiset` 中的指定元素。
- `find`:查找 `std::multiset` 中是否存在指定元素。
- `count`:统计 `std::multiset` 中指定元素的个数。
- `lower_bound`:查找第一个不小于指定元素的元素。
- `upper_bound`:查找第一个大于指定元素的元素。
下面是一个简单的 `std::multiset` 示例代码:
```cpp
#include <iostream>
#include <set>
int main() {
std::multiset<int> s;
s.insert(3);
s.insert(1);
s.insert(2);
s.insert(2);
for (auto x : s) {
std::cout << x << " ";
}
std::cout << std::endl;
s.erase(2);
for (auto x : s) {
std::cout << x << " ";
}
std::cout << std::endl;
std::cout << "count(2): " << s.count(2) << std::endl;
auto it = s.find(3);
if (it != s.end()) {
std::cout << "found: " << *it << std::endl;
} else {
std::cout << "not found" << std::endl;
}
auto lb = s.lower_bound(2);
if (lb != s.end()) {
std::cout << "lower_bound(2): " << *lb << std::endl;
} else {
std::cout << "not found" << std::endl;
}
auto ub = s.upper_bound(2);
if (ub != s.end()) {
std::cout << "upper_bound(2): " << *ub << std::endl;
} else {
std::cout << "not found" << std::endl;
}
return 0;
}
```
输出结果为:
```
1 2 2 3
1 3
count(2): 0
found: 3
lower_bound(2): 3
upper_bound(2): 3
```
可以看到,`std::multiset` 中可以存储相同的元素,`s.count(2)` 返回的是 `0`,因为 `2` 已经被删除了。`s.lower_bound(2)` 返回的是 `3`,因为它是第一个不小于 `2` 的元素。`s.upper_bound(2)` 也返回 `3`,因为它是第一个大于 `2` 的元素。