面试之快速学习STL-multimap

这篇具有很好参考价值的文章主要介绍了面试之快速学习STL-multimap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

multimap

  1. multimap 容器也用于存储 pair<const K, T> 类型的键值对(其中 K 表示键的类型,T 表示值的类型)
  2. 其中各个键值对的键不能做修改;该容器也会自行根据键的大小对存储的所有键值对做排序操作。
  3. 和 map 容器的区别在于,multimap 容器中可以同时存储多(≥2)个键相同的键值对。
//,使用此方式初始化 multimap 容器时,其底层会先将每一个{key, value}创建成 pair 类型的键值对,然后再用已建好的各个键值对初始化 multimap 容器。
std::multimap<std::string, std::string> map1{
{"k1","v1"},
{"k2","v2"},
{"k3","v3"},
};

//借助 pair 类模板的构造函数来生成各个pair类型的键值对
multimap<string, string>mymultimap{
    pair<string,string>{"C语言教程", "http://c.biancheng.net/c/"},
    pair<string,string>{ "Python教程", "http://c.biancheng.net/python/"},
    pair<string,string>{ "STL教程", "http://c.biancheng.net/stl/"}
};
//调用 make_pair() 函数,生成键值对元素
//创建并初始化 multimap 容器
multimap<string, string>mymultimap{
    make_pair("C语言教程", "http://c.biancheng.net/c/"),
    make_pair("Python教程", "http://c.biancheng.net/python/"),
    make_pair("STL教程", "http://c.biancheng.net/stl/")
};

//拷贝
multimap<string, string>newmultimap(mymultimap);

multimap模版参数

  1. multimap 类模板共可以接收 4 个参数,其中第 3 个参数可用来修改 multimap 容器内部的排序规则
template < class Key,                                   // 指定键(key)的类型
           class T,                                     // 指定值(value)的类型
           class Compare = less<Key>,                   // 指定排序规则
           class Alloc = allocator<pair<const Key,T> >  // 指定分配器对象的类型
           > class multimap;
  1. 如下面进行降序操作,默认是升序
std::multimap<char, int, std::greater<char>> map3{
{'a', 1},
{'b', 2}
}

//默认是std::less<char>

注意

  1. 和 map 容器相比,multimap 未提供 at() 成员方法,也没有重载 [] 运算符。这意味着,map 容器中通过指定键获取指定指定键值对的方式,将不再适用于 multimap 容器。其实这很好理解,因为 multimap 容器中指定的键可能对应多个键值对,而不再是 1 个
std::multimap<char, int> map1{
        {'c', 10},
        {'b', 20},
        {'b', 15},
        {'a', 30}
    };
    //1. count
    std::cout<< "map1.count('b') = " << map1.count('b') << std::endl;
    //map1.count('b') = 2
    
    //2. 遍历
    for (auto it = map1.begin(); it != map1.end(); ++it) {
        std::cout << it->first << " "<< it->second << std::endl;
    }
    /*
     a 30
     b 20
     b 15
     c 10
     */
    //3. find
    auto it1 = map1.find('b');
    std::cout << it1->first << " "<< it1->second << std::endl;
    //b 20
    
    //4. lower/upper_bound
    auto it2 = map1.upper_bound('b');
    std::cout << it2->first << " "<< it2->second << std::endl;
    //c 10
    
    auto it3 = map1.lower_bound('b');
    std::cout << it3->first << " "<< it3->second << std::endl;
    //b 20
    
    //5.equal_range
    auto p1 = map1.equal_range('b');
    for (auto it = p1.first; it != p1.second; ++it) {
        std::cout << it->first << " "<< it->second << std::endl;
    }
    /*
     b 20
     b 15
     */

说明

  1. find(key), 在 multimap 容器中查找首个键为 key 的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和 end() 方法一样的迭代器。
  2. lower_bound(key) 返回一个指向当前 multimap 容器中第一个大于或等于 key 的键值对的双向迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
  3. upper_bound(key) 返回一个指向当前 multimap 容器中第一个大于 key 的键值对的迭代器。
  4. equal_range(key) 该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的键为 key 的键值对。

文章来源地址https://www.toymoban.com/news/detail-656362.html

到了这里,关于面试之快速学习STL-multimap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STL容器之<multimap>

    系统:ubuntu 22.04.2 LTS 64位 gcc版本:11.3.0 编辑器:vsCode 1.76.2 关联式容器。 每个元素都包含用于排序的键和对应的值。 键值是不要求唯一(map中键要求唯一),同一个键可以对应多个值。 支持双向迭代器。 在插入、删除和搜索时间复杂度为log(n)。 键不可以直接修改,需要先

    2023年04月08日
    浏览(23)
  • C++STL——map/multimap容器详解

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 在STL中有些容器的元素是一种叫pair的数据结构。 对组(pair)是类模板,对组(pair)将一对值组合成一个值,一般用于表示key/value数据,这一对值可以具有不同的数据类型,两个值可以分别用pair的两个公

    2024年02月14日
    浏览(32)
  • 详解 C++中STL的map/multimap

    ap容器中所有元素都是pair,pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)。 同时,所有元素都会根据元素的键值自动排序。 map/multimap属于关联式容器,底层数据结构是用二叉树实现的。它的优点就是可以根据key值快速找到value值。 这里需要了解map与

    2024年02月16日
    浏览(38)
  • 20 标准模板库STL之map和multimap

    基础知识         1、map是一个键值映射的容器,键不能重复,值可以重复,内部使用红黑变体的平衡二叉树来实现。向map中插入新的元素时,会自动调节二叉树的排列,将元素放到合适的位置。multimap与map不同的地方在于,map内相同数值的键只能出现一次,multimap内相同数

    2024年02月04日
    浏览(28)
  • 【C++入门到精通】C++入门 —— map & multimap (STL)

    各位小伙伴们,在这个美好的中秋节来临之际,我衷心祝福你和你的家人度过一个幸福、团圆的时刻。愿明月的皎洁照耀你的每一天,团圆的月饼传递着我对你的思念和祝福。祝福你在中秋佳节里收获幸福与快乐,家庭和睦,心想事成。中秋快乐! 前面我们讲了C语言的基础

    2024年02月08日
    浏览(31)
  • 【C++】STL——set/multiset 和 map/multimap的使用

    在初阶阶段,我们已经接触过STL中的部分容器 比如:vector、list、deque、forward_list(C++11)等,这些容器统称为 序列式容器 ,因为其底层为线性序列的数据结构,里面存储的是元素本身。 而今天我们要学习的几个容器称为关联式容器,那什么是关联式容器?它与序列式容器有什

    2024年02月14日
    浏览(31)
  • c++11 标准模板(STL)(std::unordered_multimap)(九)

    template     class Key,     class T,     class Hash = std::hashKey,     class KeyEqual = std::equal_toKey,     class Allocator = std::allocator std::pairconst Key, T class unordered_multimap; (1) (C++11 起) namespace pmr {     template class Key, class T,               class Hash = std::hashKey,               class Pred = std::equa

    2023年04月09日
    浏览(31)
  • C++:stl中set(multiset)和map(multimap)的介绍和使用

    本文主要从概念、常用接口和使用方法方面介绍set(multiset)和map(multimap)。 目录 一、概念介绍 1.关联式容器 2.键值对 3. 树形结构的关联式容器 二、set和multiset 1.set的介绍 2.set使用 1. set模板参数列表 2. set构造 3. set迭代器 4. set容量 5. set修改操作 6.set使用举例 3.multiset介绍 4.mul

    2024年02月08日
    浏览(31)
  • 【C++进阶04】STL中map、set、multimap、multiset的介绍及使用

    vector/list/deque… 这些容器统称为 序列式容器 因为其底层为线性序列的数据结构 里面存储的是元素本身 map/set… 这些容器统称为 关联式容器 关联式容器也是用来存储数据的 与序列式容器不同的是 其里面存储的是key, value结构的键值对 在数据检索时比序列式容器效率更高 “键

    2024年02月03日
    浏览(34)
  • Spring进阶学习(附面试快速答法)

    思维导图 Spring框架中的单例bean是线程安全的吗? Spring框架中的bean是单例的吗? 是的,Spring框架中有一个@Scope注解,默认的值就是singleton,单例的 但是单例bean不是线程安全的 举个栗子:我们看一段服务器中的代码片段 Spring框架中的单例bean是线程安全的吗? 不是线程安全

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包