set和multiset的核心区别在于元素唯一性:1.set不允许重复元素,插入相同值时第二个会被忽略;2.multiset允许重复值存在,所有插入都会保留。此外,插入操作返回类型不同:set的insert()返回pair<iterator, bool>,而multiset只返回iterator。删除操作也不同:set用erase(value)删除唯一元素,multiset用erase(value)则删除所有相同元素,若要删一个需传迭代器。查找行为方面:set的find()返回唯一元素,multiset可能返回多个,常用equal_range(key)获取相同值的范围。适用场景:set适用于存储唯一键,multiset适用于频率统计、排行榜等需重复元素的场景。

在C++标准库中,
set
multiset
set
multiset

如果你需要一个能自动排序并且允许重复键的数据结构,那么
multiset

这是两者最根本的区别:
立即学习“C++免费学习笔记(深入)”;
set<int>
multiset<int>
例如:

std::set<int> s; s.insert(5); s.insert(5); // s.size() == 1 std::multiset<int> ms; ms.insert(5); ms.insert(5); // ms.size() == 2
所以在处理频率统计、排行榜等场景时,
multiset
虽然两者都有
insert()
erase()
set
insert()
pair<iterator, bool>
multiset
insert()
iterator
删除方面也有差异:
set
erase(value)
multiset
erase(value)
如果你只想删掉一个特定值的实例,应该传迭代器进去:
auto it = ms.find(5);
if (it != ms.end()) {
ms.erase(it); // 只删一个
}查找元素时,
set
multiset
常用的方法包括:
find()
count(key)
equal_range(key)
举个例子:
std::multiset<int> ms = {3, 5, 5, 7};
auto range = ms.equal_range(5);
for (auto it = range.first; it != range.second; ++it) {
std::cout << *it << " ";
}
// 输出:5 5这个功能在做区间查找或批量处理时非常有用。
set
multiset
基本上就这些区别。选择哪个容器取决于你的具体需求。
以上就是C++ STL multiset和set有何不同 分析允许重复元素的关联容器的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号