【C++】STL 容器 - multiset 容器 ( std::multiset 容器简介 | std::multiset 容器 常用操作 api 简介 )

2024-01-01 09:48:14 浏览数 (1)

文章目录
  • 一、mulset 容器
    • 1、std::multiset 容器简介
    • 2、代码示例 - multiset 容器
  • 二、std::multiset 容器 常用操作 api 简介
    • 1、常用 api 简介
    • 2、代码示例 - multiset 容器常用操作

一、mulset 容器


1、std::multiset 容器简介

在 C 语言 的 标准模板库 ( STL , Standard Template Library ) 中 , 提供了 std::multiset 容器 ,

  • 该容器中的元素的 键值 可以重复 ;
  • 该容器中的元素 是 有序的 , 按照指定的规则 进行排序 ;

向 std::multiset 容器 中 插入元素时 , 不需要验证集合中是否已经存在该元素 , 直接根据排序规则 , 插入到指定的位置 ;

std::multiset 容器 不支持 将 元素插入到指定位置 ;

std::multiset 容器 也不支持 使用 下标位置 直接访问元素 ;

使用 std::multiset 容器前 , 需要 导入 set 头文件 ;

代码语言:javascript复制
#include "set"

与 set 容器类似的 容器还有 multiset 容器 , 唯一区别是 set 中的元素只能出现一次 , multiset 中的元素可以出现多次 ;

std::multiset 容器 中的元素 不能直接修改 , 只能 先删除 原来的元素 , 然后插入新元素 ;

2、代码示例 - multiset 容器

在下面的代码中 , 创建了一个 multiset 容器 , 存储重复的元素 ;

代码语言:javascript复制
multiset<int> myMultiSet = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };

上述容器初始化时 , 会自动对容器中的元素进行排序 , 排序后的顺序如下 :

代码语言:javascript复制
1 1 2 2 3 3 4 4 5

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;
#include "set"

int main() {

    // 初始化 multiset 容器
    multiset<int> myMultiSet = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };

    // 遍历打印 multiset 中的所有元素  
    for (auto& elem : myMultiSet) {
        cout << elem << " ";
    }
    cout << endl;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

代码语言:javascript复制
1 1 2 2 3 3 4 4 5
请按任意键继续. . .

二、std::multiset 容器 常用操作 api 简介


1、常用 api 简介

std::multiset 容器 常用操作 : std::multiset 容器 与 std::set 容器 操作 的 接口基本相同 ;

  • insert() : 向 multiset 容器中插入一个或多个元素 ;
  • erase() : 删除 multiset 容器 中的一个或多个元素 ;
  • clear() : 清空 multiset 容器中的所有元素 ;
  • find() : 在 multiset 容器 中查找一个特定元素 ;
  • count() : 返回 multiset 容器 中 特定元素的数量 , 该函数 set 容器中只能返回 0 或 1 , 在 multiset 容器中才有意义 ;
  • lower_bound() : 返回 multiset 容器 中 大于等于 给定键值的元素 的 范围 ;
  • upper_bound() : 返回 multiset 容器 中 大于 给定键值的元素 的 范围 ;
  • equal_range() : 返回 multiset 容器 中 等于 给定键值的元素 的 范围 ;

2、代码示例 - multiset 容器常用操作

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;
#include "set"

void printMS(multiset<int>& ms) {
    // 遍历打印 multiset 中的所有元素  
    for (auto& elem : ms) {
        cout << elem << " ";
    }
    cout << endl;
}


int main() {

    // 初始化 multiset 容器
    multiset<int> myMultiSet = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
    // 遍历打印容器
    printMS(myMultiSet);

    // 插入元素
    myMultiSet.insert(9);
    // 遍历打印容器
    cout << "插入元素 9 : ";
    printMS(myMultiSet);

    // 删除元素
    myMultiSet.erase(3);
    // 遍历打印容器
    cout << "删除元素 3 : ";
    printMS(myMultiSet);

    // 获取元素数量
    int count = myMultiSet.count(2);
    // 遍历打印容器
    cout << "元素 2 个数 : " << count << endl;
    printMS(myMultiSet);

    // 清空元素
    myMultiSet.clear();
    // 遍历打印容器
    cout << "清空元素 : ";
    printMS(myMultiSet);

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

1 1 2 2 3 3 4 4 5 插入元素 9 : 1 1 2 2 3 3 4 4 5 9 删除元素 3 : 1 1 2 2 4 4 5 9 元素 2 个数 : 2 1 1 2 2 4 4 5 9 清空元素 : 请按任意键继续. . .

0 人点赞