当前位置: 首页 > article >正文

STL关联式容器之multiset及multimap

multiset

        multiset的特性及用法和set 完成相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制RB-tree的insert-equal()而非insert_unique().下面是multiset的源代码提要,只列出了与set的不同之处:

template<class Key, class Compare = less<Key>, class Alloc = alloc>
class multiset {
public:
    //typedefs:
    ... 与set相同

    template <class InputIterator>
    multiset(InputIterator first, InputIterator last)
     :t(Compare()) { t.insert_equal(first, last); }

    template<class InputIterator>
    multiset(InputIterator first, InputInterator last, const Compare& comp)
    :t(comp) {
        t.insert_equal(first, last);
    }

    iterator insert(const value_type&x ) {
        return t.insert_equal(x);
    }

    iterator insert(iterator position, const value_type&x) {
        typedef typename rep_type::iterator rep_iterator;
        return t.insert_equal((rep_iterator&)position, x);
    }

    template<class InputIterator>
    iterator insert(InputIterator first, InputIterator last ) {
        return t.insert_equal(first, last);
    }
    ...
};

multimap

        multimap的特性以及用法与map 完全相同,唯一差别在于它允许键值重复,因此它的插入操作采用的底层机制RB-tree的insert_equal而非insert_unique.下面是multimap的源代码摘要,只列出与map不同之处:

template<class Key, class T, class Compare = less<Key>, class Alloc = alloc>
class multi map {
public :
    // typedefs 
    ... (与map相同)
    
    template <class InputIterator>
    multimap(InputIterator first, InputIterator last) 
    : t(Compare()) { t.insert_equal(first, last); }

    template <class InputIterator>
    multimap(InputIterator first, InputIterator last, Compare const& comp) 
    : t(comp) { t.insert_equal(first, last); }


    iterator insert(const value_type&x) { return t.insert_equal(x); }
    iterator insert(iterator position, cosnt value_type&x) {
        return t.insert_equal(position, x);
    }
    
    template<class InputIterator>
    void insert(InputIterator first, InputIterator last) {
        t.insert_equal(first, last);
    }
};

参考文档《STL源码剖析》--侯捷


http://www.kler.cn/a/406855.html

相关文章:

  • 从 Mac 远程控制 Windows:一站式配置与实践指南20241123
  • element-plus教程:Checkbox 多选框
  • 根据已知站点寻找路网的最短路径
  • Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven
  • 华三(H3C)T1020 IPS服务器硬件监控指标解读
  • 物业管理系统的设计和实现
  • Flutter:AnimatedSwitcher当子元素改变时,触发动画
  • Ansible使用简介和基础使用
  • 嵌入式 UI 开发的开源项目推荐
  • C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用-腾讯云开发者社区-腾讯云
  • vue3中父div设置display flex,2个子div重叠
  • 华为无线AC+AP组网实际应用小结
  • FreeIPCC:Ai智能呼叫中心是什么?
  • 【数据结构】归并排序 —— 递归及非递归解决归并排序
  • 基于自混合干涉测量系统的线展宽因子估计算法matlab仿真
  • Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装
  • MAC C语言 Helloword
  • spring学习(四)
  • DevOps 之 CI/CD入门操作 (二)
  • k8s上面的Redis集群链接不上master的解决办法
  • Powershell 命令行窗口 设置行宽、折行、行省略
  • IText创建加盖公章的pdf文件并生成压缩文件
  • 高级java每日一道面试题-2024年11月22日-JVM篇-说说堆和栈的区别?
  • 纯HTMLCSS实现3D旋转地球
  • 嵌入式C语言面试题 - 2024/11/18
  • 【HM-React】01. React基础-上