基本用法

multiset 是 C++ 标准模板库(STL)中的一个关联容器,它允许存储多个相同值的元素,并且自动按顺序进行排序。multiset 的主要特点是可以高效地进行插入、删除和查找操作。

要使用 multiset,首先需要包含头文件:

1
#include <set>

然后,可以定义一个 multiset

1
std::multiset<int> myMultiset;

特点和注意事项

  1. 自动排序multiset 中的元素总是按升序排列(默认情况下),也可以通过自定义比较函数进行排序。

  2. 允许重复:与 set 不同,multiset 允许存储多个相同的值

  3. 底层实现multiset 通常使用红黑树(Red-Black Tree)来实现,这使得插入、删除和查找操作的时间复杂度为 O(log n)。

  4. 查找操作

    • count(key):返回指定键的数量。
    • find(key):返回一个指向键的迭代器。
    • equal_range(key):返回一个范围,表示键的所有等价元素。
  5. 插入和删除操作

    • insert(value):插入值。
    • erase(key):删除所有等于键的元素。
    • erase(iterator):删除指定迭代器处的元素。

示例代码

以下是一个使用 multiset 的简单示例,展示了基本的插入、查找和删除操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <set>

int main() {
// 定义一个 multiset
std::multiset<int> myMultiset;

// 插入元素
myMultiset.insert(10);
myMultiset.insert(20);
myMultiset.insert(10);
myMultiset.insert(30);

// 输出 multiset 中的元素
std::cout << "Multiset elements: ";
for (const int& elem : myMultiset) {
std::cout << elem << " ";
}
std::cout << std::endl;

// 查找元素
std::cout << "Count of 10: " << myMultiset.count(10) << std::endl;

// 删除元素
myMultiset.erase(10);

// 输出删除后的 multiset 中的元素
std::cout << "Multiset elements after erasing 10: ";
for (const int& elem : myMultiset) {
std::cout << elem << " ";
}
std::cout << std::endl;

return 0;
}

运行结果:

1
2
3
Multiset elements: 10 10 20 30 
Count of 10: 2
Multiset elements after erasing 10: 20 30

总结

multiset 是一个非常有用的容器,特别是在需要存储重复元素并且对元素进行排序的场景中。它提供了高效的插入、删除和查找操作,但需要注意的是,它允许重复的元素存在,并且这些操作的时间复杂度通常为 O(log n)。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。