C++ set和multiset用法详解_C++集合容器去重与查找技巧

admin 百科 9
set 不允许重复元素,multiset 允许;两者均基于红黑树实现,自动排序,提供插入、删除、查找等高效操作,常用遍历方式为范围for循环。

C++ set和multiset用法详解_C++集合容器去重与查找技巧-第1张图片-佛山资讯网

在C++标准模板库(STL)中,setmultiset 是两个非常实用的关联式容器,它们基于红黑树实现,能够自动对元素进行排序,并提供高效的插入、删除和查找操作。虽然两者功能相似,但在处理重复元素方面存在关键差异。本文将详细讲解它们的用法、区别以及常见操作技巧。

set 与 multiset 的基本特性

set 是一个有序集合容器,其中每个元素都是唯一的,不允许重复值。它会自动按照升序排列元素(默认使用

multiset 与 set 基本相同,唯一的不同是允许存储重复元素。也就是说,同一个值可以出现多次,其他操作方式几乎一致。

常用头文件:

立即学习“C++免费学习笔记(深入)”;

#include

声明与初始化

定义 set 和 multiset 的语法如下:

std::set s; // 存储不重复整数的 set

std::multiset ms; // 可存储重复整数的 multiset

std::set<:string> names; // 字符串集合

支持初始化列表(C++11 起):

std::set s = {5, 2, 8, 2, 1}; // 实际内容为 {1,2,5,8},自动去重并排序

std::multiset ms = {5, 2, 8, 2, 1}; // 内容为 {1,2,2,5,8},保留重复项

插入与删除元素

使用 insert() 插入元素,erase() 删除元素。

插入示例:

s.insert(10);

s.insert({3, 7, 3}); // 插入多个值,重复的 3 不会被再次加入

insert 返回值:对于 set,返回 pair,bool 表示是否插入成功;multiset 总是插入成功,返回 iterator。

删除示例:

s.erase(5); // 删除值为 5 的元素

s.erase(it); // 删除指定迭代器指向的元素

s.erase(begin_it, end_it); // 删除范围内的元素

注意:erase 使用值删除时,会移除所有匹配项。在 multiset 中,这可能删除多个元素。

查找与遍历技巧

高效查找是 set/multiset 的强项。

find():查找指定值,返回迭代器。未找到则返回 end()。

auto it = s.find(3);

if (it != s.end()) { /* 找到了 */ }

count():统计某值出现次数。set 中只能是 0 或 1;multiset 可大于 1。

if (ms.count(2)) { /* 至少有一个 2 */ }

标签: multiset c++ set ai c++ 区别 排列

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~