C++中set与multiset的区别。

如题所述

第1个回答  2022-12-11
C++ STL set和multiset的使用\x0d\x0a1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。\x0d\x0a创建 multiset base;\x0d\x0a删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除\x0d\x0abase.count( a ):set能返回0或者1,multiset是有多少个返回多少个.\x0d\x0aSet和multiset都是引用头文件,复杂度都是logn\x0d\x0a2,Set中的元素可以是任意类型的,但是由于需要排序,所以元素必须有一个序,即大小的比较关系,比如 整数可以用<比较.\x0d\x0a3,自定义比较函数;\x0d\x0ainclude\x0d\x0atypedef struct\x0d\x0a{ 定义类型 }\x0d\x0ass(类型名);\x0d\x0astruct cmp\x0d\x0a{\x0d\x0abool operator()( const int &a, const int &b ) const\x0d\x0a{ 定义比较关系<}\x0d\x0a};\x0d\x0a(运算符重载,重载<)\x0d\x0aset base; ( 创建一个元素类型是ss,名字是base的set )\x0d\x0a注:定义了<,==和>以及>=,<=就都确定了,STL的比较关系都是用<来确定的,所以必须通 过定义< --“严格弱小于”来确定比较关\x0d\x0a4,set的基本操作:\x0d\x0abegin() 返回指向第一个元素的迭代器\x0d\x0aclear() 清除所有元素\x0d\x0acount() 返回某个值元素的个数\x0d\x0aempty() 如果集合为空,返回true\x0d\x0aend() 返回指向最后一个元素的迭代器\x0d\x0aequal_range() 返回集合中与给定值相等的上下限的两个迭代器\x0d\x0aerase() 删除集合中的元素\x0d\x0afind() 返回一个指向被查找到元素的迭代器\x0d\x0aget_allocator() 返回集合的分配器\x0d\x0ainsert() 在集合中插入元素\x0d\x0alower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器\x0d\x0akey_comp() 返回一个用于元素间值比较的函数\x0d\x0amax_size() 返回集合能容纳的元素的最大限值\x0d\x0arbegin() 返回指向集合中最后一个元素的反向迭代器\x0d\x0arend() 返回指向集合中第一个元素的反向迭代器\x0d\x0asize() 集合中元素的数目\x0d\x0aswap() 交换两个集合变量\x0d\x0aupper_bound() 返回大于某个值元素的迭代器\x0d\x0avalue_comp() 返回一个用于比较元素间的值的函数\x0d\x0a5,自定义比较函数:\x0d\x0aFor example:\x0d\x0a#include\x0d\x0a#include\x0d\x0ausing namespace std;\x0d\x0atypedef struct {\x0d\x0aint a,b;\x0d\x0achar s;\x0d\x0a}newtype;\x0d\x0astruct compare //there is no ().\x0d\x0a{\x0d\x0abool operator()(const newtype &a, const newtype &b) const\x0d\x0a{\x0d\x0areturn a.selement;\x0d\x0aint main()\x0d\x0a{\x0d\x0anewtype a,b,c,d,t;\x0d\x0aa.a=1; a.s='b';\x0d\x0ab.a=2; b.s='c';\x0d\x0ac.a=4; c.s='d';\x0d\x0ad.a=3; d.s='a';\x0d\x0aelement.insert(a);\x0d\x0aelement.insert(b);\x0d\x0aelement.insert(c);\x0d\x0aelement.insert(d);\x0d\x0aset::iterator it;\x0d\x0afor(it=element.begin(); it!=element.end();it++)\x0d\x0acout<<(*it).a<<" ";\x0d\x0acout<\x0d\x0a#include \x0d\x0ausing namespace std;\x0d\x0abool fncomp (int lhs, int rhs) {return lhs first; // empty set of ints\x0d\x0aint myints[]= {10,20,30,40,50};\x0d\x0aset second (myints,myints+5); // pointers used as iterators\x0d\x0aset third (second); // a copy of second\x0d\x0aset fourth (second.begin(), second.end()); // iterator ctor.\x0d\x0aset fifth; // class as Compare\x0d\x0abool(*fn_pt)(int,int) = fncomp;\x0d\x0aset sixth (fn_pt); // function pointer as Compare\x0d\x0areturn 0;\x0d\x0a}

C++中set与multiset的区别。
set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。\\x0d\\x0a创建 multiset base;\\x0d\\x0a删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除\\x0d\\x0abase.count( a ):set能返回0或者1,multiset是有多少个返回多少个.\\x0d\\x0aSet和multiset都是...

c++集合set、multiset容器详解
set和multiset是C++中的关联式容器,它们的基本元素类型是pair。在set容器中,存储的每个键值对要求键(key)和值(value)必须相同。以两组键值对为例,第一组中每个键值对的键和值不相等,而第二组中每个键值对的键和值是相等的。对于set容器来说,只能存储第二组键值对,不能存储第一组。由于set...

STL源码剖析9-set、multiset
在C++标准模板库(STL)中,set和multiset是两种常用的数据结构,它们底层实现依赖于红黑树(rb tree)。set是一种无序的关联容器,不允许有重复元素,而multiset则允许元素重复,但仍然保持插入顺序。2. set的实现 set内部的红黑树使用了stl_function.h中的仿函数模板参数,这个仿函数用于定义元素的比较规则。

set\/multiset容器(集合\/多重集合)
在set与multiset的区别上,set保证元素唯一性,而multiset允许多个相同元素存在。set的构造与赋值遵循C++标准容器的惯例,通过构造函数初始化或通过insert等方法进行元素的添加。set的大小不可调整,因此没有resize()方法,其容量根据实际元素数量动态扩展。插入与删除操作在set中执行迅速且高效,允许在任何位置...

【C++每日知识点】set<Key>、multiset<Key> 和 unordered_set<Key>
在C++的STL中,set、multiset以及unordered_set是三种特殊的关联容器,它们用于存储唯一的键,各有其独特特性。set,它是一种有序的集合,元素的顺序由键的值决定。如果你需要保持数据的有序性,同时对插入和查找速度有一定要求,set是不错的选择。它的主要操作包括构造、赋值,例如:cpp set mySet;my...

【洛谷日报#7】STL整理之set
set是C++ STL中的一个容器,基于红黑树实现,用于存储无重复元素的集合。与之类似的是multiset,可以存储重复元素。set和multiset支持多种操作,如插入、删除、查找等。插入元素使用set.insert(x),函数返回插入位置的迭代器及插入成功与否的信息。查找元素使用set.find(x),若元素存在返回迭代器,否则返回...

[C++][STL]set
关联容器如set、map,其关键在于根据关键字存储和访问元素,与顺序容器以位置访问元素有本质区别。map和set的插入、删除效率较其他序列容器高,因无需进行内存拷贝和移动操作。set中的元素通过节点形式存储,插入操作只需调整节点指针至新节点,无需额外的内存操作。关联容器不支持顺序容器的定位操作,因为元素...

Cpp浅析系列-STL之set
集合(Set)是C++ STL中的一个数据容器,用于存储唯一且排序的对象。在C++ STL中,关联容器set、multiset、map和multimap采用了红黑树(RB树)作为内部结构,这种数据结构的统计性能优于一般的平衡二叉树,因此被广泛使用。对于set和map这样的关联容器,它们在内存管理上相对高效,因为它们是通过节点结构来存储...

关联容器的存储结构?
std::unordered_set:使用哈希表实现,存储唯一的键值(不允许重复),无序存储。std::unordered_multiset:同样使用哈希表实现,允许多个键相同的键值存在。这些关联容器的存储结构不同,但它们都提供了高效的查找、插入和删除操作,并根据键的特性提供了不同的存储和访问方式。具体选择使用哪种关联容器取决...

C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g+...
在元素数量超过15000时,unordered_multiset在查找方面表现最佳,其次是unordered_map和unordered_set,set则表现较差。当元素数量少于1024时,unordered_multimap在元素数量小于600时性能最差,而当元素数量超过600时,set成为查找效率最低的容器。对于更深入的性能对比分析,读者可参考文中提供的图表和GitHub地址...

相似回答
大家正在搜