Multiset

multiset是对set的延伸。相对于set而言,他包含重复的元素。具体如下:

set 把key一样的元素认为是同一个元素,并且对计数+1

multiset把key一样的元素认为是等价的元素,并且依次存储他们。

举例:给定一个名单,上面有该人的姓名与年龄,并且我们以姓名对这个人进行统计。

set 会把姓名一样的人,当成一个进行计数相加

multiset则会把姓名一样的人,当成一组人,依次都保存下来。

参考

  1. 维基百科多列
PBDS(Policy-Based Data Structures)是C++标准库中一种灵活的数据结构,它允许用户根据自己的需求选择不同的策略来定制数据结构的行为。PBDS提供了一组模板类和函数,用于实现各种高级的数据结构,如集合(Set)、多重集合(Multiset)、映射(Map)、多重映射(Multimap)等。 在PBDS中,multiset是一个基于平衡二叉树的有序集合,它能够存储重复元素。与标准库中的std::multiset类似,PBDS的multiset也提供了以下功能: - 插入元素 - 删除元素 - 查找元素 - 访问元素 然而,PBDS的multiset更加灵活和高效,因为它允许用户选择不同的比较策略、分配策略和其他行为策略。例如,你可以选择使用不同的比较函数来定义元素的排序规则,或者使用不同的内存分配策略来优化性能。 使用PBDS的multiset时,你需要首先包含相应的头文件,并选择合适的策略来实例化multiset。下面是一个简单的例子,展示如何使用PBDS的multiset: ```cpp #include <ext/pb_ds/assoc_container.hpp> #include <iostream> #include <string> using namespace __gnu_pbds; int main() { // 定义一个使用默认策略的multiset,内部使用红黑树实现 tree<std::string, null_type, std::less<std::string>, rb_tree_tag, tree_order_statistics_node_update> my_multiset; // 插入一些字符串到multiset中 my_multiset.insert("apple"); my_multiset.insert("banana"); my_multiset.insert("cherry"); my_multiset.insert("banana"); // 可以重复插入 // 遍历并打印multiset中的元素 for (const auto& item : my_multiset) { std::cout << item << std::endl; } return 0; } ``` 需要注意的是,PBDS是GNU的扩展,并不是标准C++的一部分,因此在使用前需要确保编译器支持且正确配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值