2026/3/3 9:17:48
网站建设
项目流程
有人做网站花了10几万,网站上用的字体,网站设计师主要做什么的,2021年网络营销考试题及答案本篇讲的map/set,其底层是红黑树#xff0c;红黑树底层是一颗平衡二叉搜索树(具体可看之前的文章—二叉搜索树#xff09;。set是key搜索场景下的结构#xff0c;map是key/value搜索场景下的结构。
2#xff0c;set系列的使用
2.1,set类的介绍
代码语言#xff1a;java…本篇讲的map/set,其底层是红黑树红黑树底层是一颗平衡二叉搜索树(具体可看之前的文章—二叉搜索树。set是key搜索场景下的结构map是key/value搜索场景下的结构。2set系列的使用2.1,set类的介绍代码语言javascriptAI代码解释template class T, // set::key_type/value_type class Compare lessT, // set::key_compare/value_compare class Alloc allocatorT // set::allocator_type class set;set的声明如上T就是set底层关键字(key)的类型。set默认要求T是支持比较大小的如果不支持或者想按自己的比较方式走可以传仿函数给第二个模板参数。set底层存储数据的内存是从空间配置器申请的如果需要可以自己实现内存池传给第三个参数一般情况下是不需要传后两个参数的set底层是用红黑树实现的增删查的效率为O(logN),迭代器遍历走的是中序遍历所以是有序的2.2,set的构造和迭代器代码语言javascriptAI代码解释//无参构造 explicit set (const key_compare comp key_compare(), const allocator_type alloc allocator_type());代码语言javascriptAI代码解释//迭代器区间构造 template class InputIterator set (InputIterator first, InputIterator last, const key_compare comp key_compare(), const allocator_type allocator_type());代码语言javascriptAI代码解释//initializer_list列表构造 其中value_type就是关键字key set (initializer_listvalue_type il, const key_compare comp key_compare(), const allocator_type alloc allocator_type());代码语言javascriptAI代码解释//拷贝构造 set (const set x);代码语言javascriptAI代码解释官方文档示例//迭代器是一个双向迭代器 iteratora bidirectional iterator to value_typeconvertible to const_iteratorconst_iteratora bidirectional iterator to const value_type代码语言javascriptAI代码解释//正向迭代器 iterator begin() noexcept; const_iterator begin() const noexcept; iterator end() noexcept; const_iterator end() const noexcept;//反向迭代器代码语言javascriptAI代码解释reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept;代码语言javascriptAI代码解释reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept;set支持正向和反向迭代遍历遍历默认按升序顺序因为底层是⼆叉搜索树迭代器遍历走的中 序支持迭代器就意味着支持范围forset的iterator和const_iterator都不支持迭代器修改数据修改 关键字数据破坏了底层搜索树的结构2.3,set的增删查//set中的key_type和value_type指的都是关键字key它的类型是T key_type - The first template parameter (T) value_type - The first template parameter (T)2.3.1,inset插入// 单个数据插入如果已经存在则插⼊失败代码语言javascriptAI代码解释pairiterator,bool insert (const value_type val);// 列表插入已经在容器中存在的值不会插入代码语言javascriptAI代码解释void insert (initializer_listvalue_type il);// 迭代器区间插入已经在容器中存在的值不会插入代码语言javascriptAI代码解释template class InputIterator void insert (InputIterator first, InputIterator last);代码示例代码语言javascriptAI代码解释#includeiostream #includeset #include string using namespace std; int main() { //去重升序排序 setint s; //去重降序排序 //setint, greaterint s; s.insert(5); s.insert(2); s.insert(7); s.insert(5); //迭代器遍历 auto it s.begin(); while (it ! s.end()) { cout *it ; it; } cout endl; //重复的值不会插入 s.insert({ 2,8,3,9 }); for (auto e : s) { cout e ; } cout endl; //按ASCLL码大小比较 setstring str { sort,insert,add }; for (auto e : str) cout e ; cout endl; return 0; }2.3.2,finderase// 查找 val 返回 val 所在的迭代器没有找到返回 end()