equal_range在C++ map中的神秘力量:90%程序员忽略的关键细节曝光

第一章:equal_range在C++ map中的神秘力量:90%程序员忽略的关键细节曝光

在C++标准库中,std::map 是一个高度优化的关联容器,通常用于存储键值对并保持按键有序。然而,许多开发者在处理重复键或区间查询时,往往忽略了 equal_range 这一强大工具的真正潜力——尤其是在 std::multimap 中,它的作用尤为关键。

equal_range 的基本行为

equal_range 返回一个 std::pair,包含两个迭代器:第一个指向第一个不小于给定键的元素(等价于 lower_bound),第二个指向第一个大于给定键的元素(等价于 upper_bound)。对于 std::map,由于键唯一,该区间最多包含一个元素;而在 std::multimap 中,它可以精确圈定所有匹配键的范围。
// 示例:使用 equal_range 在 multimap 中查找所有相同键的值
#include <map>
#include <iostream>

int main() {
    std::multimap<int, std::string> mm = {
        {1, "apple"}, {2, "banana"}, {1, "apricot"}, {2, "blueberry"}
    };

    auto range = mm.equal_range(1); // 查找键为1的所有元素
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << it->second << std::endl; // 输出: apple, apricot
    }
    return 0;
}

常见误区与性能陷阱

  • 误用 find 替代 equal_range:当容器允许重复键时,find 只返回首个匹配项,无法获取完整结果集
  • 重复调用 lower_bound 和 upper_bound:这会导致两次对数时间查找,而 equal_range 仅需一次
  • 忽视返回类型的正确解包:应使用 auto 或显式声明 std::pair<iterator, iterator>
方法时间复杂度适用场景
findO(log n)唯一键查找单个元素
equal_rangeO(log n)支持重复键的区间检索

第二章:深入理解equal_range的底层机制

2.1 equal_range的基本定义与返回类型解析

equal_range 是 C++ STL 中用于有序容器(如 std::set、std::map)和已排序区间的重要算法,定义在 <algorithm> 头文件中。它在一个已排序序列中同时查找某个值的插入点范围,返回一对迭代器,分别指向该值可能插入的第一个位置和最后一个位置。

函数原型与返回类型

其典型函数签名如下:

template <class ForwardIterator, class T>
pair<ForwardIterator,ForwardIterator>
    equal_range (ForwardIterator first, ForwardIterator last,
                 const T& val);

返回类型为 std::pair<Iterator, Iterator>,其中第一个迭代器指向首个不小于 val 的元素,第二个指向首个大于 val 的元素。若值存在,二者之间的范围即为所有相等元素的区间。

应用场景示例
  • 在多重集合(multiset)中查找所有匹配元素
  • 高效实现范围查询与批量删除

2.2 map中键唯一性对equal_range行为的影响

在C++标准库中,std::map容器保证键的唯一性,每个键最多对应一个元素。这一特性直接影响equal_range的行为表现。
equal_range 的返回值结构
调用equal_range(k)时,返回一对迭代器pair<iterator, iterator>,表示键等于k的所有元素范围。由于map中键唯一,该范围最多包含一个元素。
auto range = myMap.equal_range("key");
// range.first  指向第一个匹配元素(若存在)
// range.second 指向匹配范围后的下一个位置
上述代码中,若键存在,range.first指向该唯一元素,range.second为其后继;若不存在,则两者均指向插入点位置。
与multimap的行为对比
  • map:equal_range返回0或1个元素
  • multimap:允许重复键,可返回多个元素
因此,在遍历equal_range结果时,map的处理逻辑更简单,无需考虑多值情况。

2.3 pair区间语义的精确解读

在STL中,`pair`常用于表达一个左闭右开的区间 `[first, last)`,精准描述容器中一段可遍历的数据范围。
区间的基本语义
该区间包含起始迭代器指向的元素,但不包含结束迭代器所指元素。若两迭代器相等,则区间为空。
典型应用场景
例如 `std::equal_range` 返回的即为此类区间,适用于有序序列中值的定位:

auto range = std::equal_range(vec.begin(), vec.end(), 5);
// range.first 指向第一个不小于5的元素
// range.second 指向第一个大于5的元素
for (auto it = range.first; it != range.second; ++it) {
    std::cout << *it << " "; // 输出所有值为5的元素
}
上述代码展示了如何安全遍历返回的区间,确保仅处理目标值。
区间有效性规则
  • 迭代器必须属于同一容器
  • last 应可达自 first(即可通过递增 first 到达)
  • 若为随机访问迭代器,需满足 first ≤ last

2.4 与lower_bound、upper_bound的协作关系剖析

在STL算法中,`equal_range` 与 `lower_bound`、`upper_bound` 共同构成有序区间操作的核心三元组。它们均基于二分查找实现,适用于已排序容器。
功能语义对比
  • lower_bound:返回首个不小于目标值的迭代器
  • upper_bound:返回首个大于目标值的迭代器
  • equal_range:同时返回上述两个边界,等价于二者组合
auto range = std::equal_range(vec.begin(), vec.end(), target);
// range.first  即 lower_bound 结果
// range.second 即 upper_bound 结果
该代码通过一次调用获取值的完整分布区间,逻辑上等价于连续调用 `lower_bound` 和 `upper_bound`,但标准库可对其进行优化,提升执行效率。对于重复元素的统计与定位,这种协作模式显著简化了区间操作的复杂度。

2.5 时间复杂度分析与红黑树查找路径模拟

在红黑树中,查找操作的时间复杂度为 O(log n),得益于其自平衡特性。树的高度始终保持在对数级别,确保最坏情况下的高效性。
红黑树的性质保障平衡
  • 每个节点是红色或黑色
  • 根节点为黑色
  • 所有叶子(nil)为黑色
  • 红色节点的子节点必须为黑色
  • 从任一节点到其每个叶子的所有路径包含相同数目的黑色节点
查找路径模拟示例

// 简化版红黑树查找函数
Node* rb_search(Node* root, int key) {
    while (root != NULL && root->key != key) {
        if (key < root->key)
            root = root->left;
        else
            root = root->right;
    }
    return root; // 返回匹配节点或 NULL
}
该函数逐层比较关键字,沿左或右子树下行。由于红黑树最大高度为 2log(n+1),故最多比较 O(log n) 次即可完成查找。
节点数 n最大高度上限查找时间复杂度
102422O(log n)
1M40O(log n)

第三章:常见误用场景与陷阱规避

3.1 误以为map支持重复键时的逻辑错误

在多数编程语言中,map(或字典)结构的键是唯一的。开发者若误认为其支持重复键,将导致数据覆盖和逻辑偏差。
常见误区示例
m := make(map[string]int)
m["count"] = 1
m["count"] = 2
fmt.Println(m["count"]) // 输出:2
上述代码中,第二次赋值会覆盖第一次的值。由于 map 的键唯一性约束,"count" 对应的值从 1 被替换为 2,而非新增一条记录。
后果与规避
  • 数据静默丢失:后写入的值覆盖原有数据,无异常提示;
  • 逻辑判断失效:基于“多个同名键”设计的流程将无法按预期执行;
  • 调试困难:问题常在业务结果异常时才被发现。
若需存储多个值,应使用 map[string][]int 等结构显式支持。

3.2 迭代器失效与区间遍历的安全性问题

在并发或动态容器操作中,迭代器失效是常见的安全隐患。当容器结构被修改(如插入、删除元素),原有迭代器可能指向已释放或无效的内存位置,导致未定义行为。
常见失效场景
  • 在遍历时删除当前元素
  • 容器扩容导致内存重分配
  • 多线程同时读写同一容器
安全遍历示例(C++)

std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ) {
    if (*it % 2 == 0) {
        it = vec.erase(it); // erase 返回有效迭代器
    } else {
        ++it;
    }
}
上述代码通过接收 erase() 返回值更新迭代器,避免使用已失效的指针。关键在于:标准库容器的 erase() 操作会使其参数迭代器失效,但返回下一个有效位置。
规避策略对比
策略适用场景风险
范围 for + 索引随机访问容器逻辑复杂度高
erase 返回值推进序列容器删除仅适用于支持该语义的容器

3.3 空区间判断的正确方式与常见疏漏

在处理数组、切片或时间范围等区间操作时,空区间的判断至关重要。开发者常误用长度比较而忽略边界语义。
常见错误示例

if len(slice) == 0 {
    // 错误:未考虑 nil 切片与空切片的区别
}
该写法无法区分 nil 切片和已初始化但无元素的切片,可能导致逻辑偏差。
推荐判空方式
应结合指针与长度双重判断:

if slice == nil || len(slice) == 0 {
    // 正确:覆盖 nil 和空两种情况
}
此方式确保所有空区间场景均被识别,提升程序健壮性。
  • nil 切片:底层指针为 nil,未分配内存
  • 空切片:指针非 nil,但长度为 0

第四章:高效实践与性能优化策略

4.1 单元素map区间的遍历技巧与代码模板

在处理 map 数据结构时,若已知其仅包含单个键值对,可通过简洁方式安全遍历。直接使用 for-range 可避免空指针或越界问题。
高效遍历代码模板
for key, value := range singleElementMap {
    fmt.Printf("Key: %v, Value: %v\n", key, value)
    break // 确保只处理首个元素
}
该代码利用 Go 的 range 遍历机制,即使 map 为空也不会出错。加入 break 可提前退出,提升性能。
使用场景对比
方法安全性性能
for-range + break高优
直接索引访问低(需判空)中

4.2 条件查询中equal_range与其他方法的性能对比

在C++标准库中,`equal_range`、`find`和`lower_bound`/`upper_bound`常用于有序容器的条件查询。`equal_range`等价于同时执行`lower_bound`和`upper_bound`,返回匹配值的范围区间。
性能对比场景
对于`std::map`或`std::set`,`find`适用于唯一键查找,时间复杂度为O(log n);而`equal_range`在处理重复键时更为高效,避免多次遍历。
代码示例与分析

auto range = myMap.equal_range(key);
for (auto it = range.first; it != range.second; ++it) {
    // 处理所有匹配key的元素
}
上述代码通过`equal_range`一次性获取区间,避免了使用`find`后还需遍历重复键的开销。
性能对照表
方法适用场景平均时间复杂度
find唯一键查找O(log n)
equal_range重复键范围查询O(log n)
lower_bound + upper_bound手动区间构造O(2 log n)

4.3 结合算法库(如count、find)的协同使用模式

在现代C++开发中,标准算法库中的 count 与 find 常被协同用于高效的数据查询与统计。通过组合使用,可显著提升容器操作的可读性与性能。
典型应用场景
例如,在筛选满足特定条件的元素时,先用 find 定位起始位置,再对子区间执行 count 统计:

#include <algorithm>
#include <vector>
std::vector<int> data = {1, 3, 3, 7, 3, 9};
auto it = std::find(data.begin(), data.end(), 7); // 查找分界点
int cnt = std::count(it, data.end(), 3);          // 统计后续3的个数
上述代码中,find 返回指向值为7的迭代器,作为 count 的起始范围。该模式适用于日志分析、事件流处理等需分段统计的场景。
性能优化建议
  • 优先使用双向迭代器容器(如 std::list)以支持反向查找
  • 对有序数据,考虑替换为 lower_bound 提升效率

4.4 多线程环境下读操作的并发安全性考量

在多线程程序中,即使仅执行读操作,仍可能面临数据不一致的风险,尤其是在共享可变数据时。若无适当同步机制,读线程可能观察到部分更新的状态。
数据同步机制
使用读写锁可提升性能:
var mu sync.RWMutex
var data map[string]string

func read(key string) string {
    mu.RLock()
    defer mu.RUnlock()
    return data[key]
}
该代码通过 sync.RWMutex 允许多个读操作并发执行,同时阻止写操作期间的读取,确保视图一致性。
内存可见性问题
CPU 缓存可能导致读线程无法及时感知其他线程的写入。使用 atomic.Load 或 volatile 变量(Java)可强制刷新缓存,保障最新值的读取。
  • 只读共享数据:无需加锁
  • 存在写操作:必须引入同步原语
  • 频繁读取场景:优先选用读写锁

第五章:从map到multimap的思维跃迁与技术延伸

在标准模板库(STL)中,std::map 和 std::multimap 都基于红黑树实现,支持有序键值对存储。然而,当业务场景需要允许重复键时,std::multimap 成为不可或缺的选择。
为何选择 multimap
某些现实场景如日志系统、航班时刻表或学生选课记录,天然存在多个条目共享同一标识符的情况。例如,一名学生可选修多门课程:

std::multimap<std::string, std::string> studentCourses;
studentCourses.insert({"Alice", "Math"});
studentCourses.insert({"Alice", "Physics"});
studentCourses.insert({"Bob", "Math"});
插入与遍历策略
使用 insert() 可安全添加重复键。通过 equal_range() 获取指定键的所有值区间:

auto range = studentCourses.equal_range("Alice");
for (auto it = range.first; it != range.second; ++it) {
    std::cout << it->second << "\n";
}
性能对比分析
操作map (均摊)multimap (均摊)
插入O(log n)O(log n)
查找单个元素O(log n)O(log n)
删除所有同键元素N/AO(k + log n), k为匹配数
实际应用建议
  • 若键唯一性是硬约束,优先使用 std::map 提升可读性;
  • 当需频繁按顺序访问重复键的集合时,std::multimap 更合适;
  • 避免误用 find() 替代 equal_range(),否则仅能获取首个匹配项。
358_C++_multimap容器允许健(key)重复,其中equal_range 成员函数,这个函数返回一对迭代器,这个对表示了所有与给定键相等的元素的范围 遍历[pr.first, pr.second)这个范围(注意是左闭右开区间),你可以访问所有键等于enCfgPage的元素 阅读详情

相关推荐

保姆级教程:在Windows 10/11上安装配置KNIME 5.8.0(含中文文本库更新)

本文提供在Windows 10/11系统上安装配置KNIME 5.8.0的详细指南,包括中文文本库更新和性能优化方案。从环境准备、安装流程到中文文本处理能力强化,逐步指导用户搭建高效的数据分析环境,特别针对国内网络环境和中文用户需求提供实用解决方案。

weixin_29081101的博客 670

std::multimap::equal_range

std::pairiterator,iterator> equal_range( const Key& key ); (1)   std::pairconst_iterator,const_iterator> equal_range( const Key& key ) const; (2)   template class K > st

幽雨雨幽 2845

微信小程序审核避坑指南:巧用 wx.getAccountInfoSync 实现审核与线上环境无感切换

本文详细介绍了如何利用`wx.getAccountInfoSync`API实现微信小程序审核与线上环境的无感切换。通过环境识别技术和动态渲染架构设计,开发者可以优雅解决审核资质门槛问题,同时保持生产环境的完整用户体验。文章包含组件化实现、全局状态管理等实用方案,帮助开发者提升审核通过率。

weixin_30527423的博客 260

C++ STL模板库中multimap::equal_range()的用法

multimap::equal_range()是 C++ STL 中的内置函数,它返回对的迭代器。该对的迭代器是指一个范围的边界,该范围包括容器中具有等效于 k 的键的所有元素。如果没有与键 K 匹配,则返回的范围长度为 0,两个迭代器都指向在 k 之后第一个元素,根据容器的内部比较对象 (key_comp),该元素的键被认为在 k 之后。...

1703

一篇NS SAR ADC的学习记录

一篇NS SAR ADC的学习记录 内容包含: OverSampling Noise Shaping Dynamic Amplifier DAC with Redundancy 最近看了些有意思的SAR ADC结构,但是因为确实对模拟这个领域不太熟,导致了一系列的级联查找,最终达到了一个大概能懂的状态,为了理清思路,顺便别让看了这么些天的东西浪费了,还是计划写篇文章。 ps:由于不是一篇特别正紧的报告,参考文献就写的比较随便,且我还是个做数字的 A 13.5-ENOB, 107-μW Noise-Sha

weixin_45669724的博客 8711

手把手教你用STM32F303和LAN9252搭建EtherCAT从站(附IO/AD/DA完整代码)

本文详细介绍了如何使用STM32F303和LAN9252搭建EtherCAT从站,涵盖硬件选型、开发环境配置、协议栈移植及IO/AD/DA功能实现。通过实战指南和完整代码,帮助开发者快速掌握工业自动化中的实时通信技术,提升系统性能与可靠性。

weixin_26802933的博客 235

C++中multimap函数equal_range的用法

首先,我们要清楚map 和 multimap都底层都是红黑树,其数据插入进去的时候就已经是有序的了。multimap可以插入相同的键,因此就存在一个问题,我们如何知道插入了多少个相同的元素呢?那么,下面的函数就派上用场了。 equal_range()函数主要是求在multimap中有多少个重复的数。 比如:可以看出该函数返回值是两个迭Map类型的迭代器,分别指向该元素的起始位置和该元素结束位置的下一个元素的位置。 #include <iostream> #include <map>

看看世界看看你 7393

IgH EtherCAT 从入门到精通:第 4 章 网络设备驱动选型与配置

摘要:本章详细介绍了EtherCAT主站网络设备驱动的选型与配置。IgH EtherCAT Master提供Generic通用驱动和Native原生驱动两种方案:Generic驱动通过Linux Socket接口实现,兼容性强但实时性较差;Native驱动通过修改网卡驱动绕过内核协议栈,具有更低延迟和更小抖动。文章具体分析了e1000/e1000e/igb/igc等Intel网卡驱动以及r8169/8139too等Realtek驱动的配置方法,并提供了驱动选型建议。对于实时性要求高的场景,推荐使用Nativ

从事嵌入式linux android驱动开发,拥有全栈能力 304

【C++】STL之equal_range

equal_range根据键值,返回一对迭代器的pair对象。如果该键值在容器中存在,则pair对象中的第一个迭代器指向该键关联的第一个实例,第二个迭代器指向该键关联的最后一个实例的下一位置。如果找不到匹配的元素,则pair对象中的两个迭代器都将指向此键应该插入的位置。总之,equal_range返回迭代器位置区间 [ lower_bound, upper_bound ) 。见以下例子: //...

mjiansun的专栏 1265

DeepFashion 服装识别:基于 YOLOv10 的深度学习实现与 UI 界面开发

随着深度学习的发展,目标检测算法在服装识别任务中表现出色,特别是 YOLO(You Only Look Once)系列模型。服装识别(Fashion Recognition)是计算机视觉领域的重要任务,广泛应用于。已提供,可用于服装分类、款式识别、虚拟试衣等应用。训练服装识别模型,并开发。

YOLO 803

SAP ABAP OData 的四种开发方式

摘要:SAP开发中CDS视图转OData服务的四种方案演进:1)7.40+版本需手动映射数据源;2)7.50+可直接引用CDS视图自动生成服务;3)7.50+通过@OData.publish注解声明式发布;4)7.54+采用服务定义与绑定实现协议解耦。新版本推荐使用最新方案,旧系统可选传统方式,整体呈现开发简化、架构解耦的技术演进趋势。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 861

multimap

迭代器类型为: bidirectional iterator  双向迭代器链接 map链接 加上头文件:#include 简便写法:typedef map m;                      typedefmap::iterator it; 除以下两个函数外,其余均与map一样 1.        计算键值对的个数:size_type  number=mapname.c

gaoxiangnumber1——Gao Xiang's Blog 503

全网最强AI辅助课题申报教程!超详细流程拆解,助你快速提高课题申报成功率(附各部分高效提示词)

实验法要详细说明自变量、因变量、实验类型、实验过程、实验步骤、测量工具名称、被试取样方式、无关变量控制方法。这个部分就是让评审专家相信我们有能力把这个项目干成,写的时候要重点突出两块内容:第一是研究基础,包括你或团队在相关领域已有的研究成果,比如发表的论文、承担过的课题、获得过的奖励、相关研究经验等,要具体、有说服力;课题申报专门给我们留了一小节用来突出课题的创新之处,不管是研究角度、研究对象、研究方法,还是应用价值都可以提炼作为我们的创新点,最后的语气成果也要明确具体,且要和课题内容紧密相关。

智能AI让学术科研更容易 665

STL之multiset中equal_range,multimap中的equal_range,bitset容器,string字符串操作,lambda表达式

 1multiset中用equal_range来遍历所有的元素 #include #include using namespace std;   //multiset中存储的元素是不重复的 void main() {     multisetint> myset;     myset.insert(100);

涂作权的博客 2925

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++ multimap equal_range() 删除

#include <iostream> #include <map> #include <vector> #include <fstream> #include <assert.h> #include <algorithm> using namespace std; int main() { multimap<int,int> m; m.insert(pair<int,int>(1,12));.

weixin_41977938的博客 597

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++ multimap与map中equal_range的差异剖析(专家级深度解读,仅限内部分享)

深入解析C++ map的equal_range在map与multimap中的行为差异,揭示查找区间的底层机制与性能影响。涵盖适用场景、返回值对比及高效使用技巧,助你精准掌握关联容器搜索方法,值得收藏。

PoliVein的博客 427

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++的“一对多”字典:精通 `std::multimap`

本文介绍了C++中std::multimap与std::map的核心区别及其应用。std::map类似标准电话簿,每个键对应唯一值;而std::multimap允许键重复,适合"一对多"关系(如餐厅指南)。重点讲解了multimap的插入操作和查找技巧,特别指出find()只能返回首个匹配项,推荐使用equal_range()高效获取所有匹配键值的方法。通过代码示例演示了这两种容器的差异及multimap的实际应用,帮助开发者正确处理分组索引数据。

weixin_42107409的博客 992

std::map查找效率翻倍的关键,equal_range你真的会用吗?

掌握C++ map的查找优化技巧,提升程序效率。详解C++ map的 equal_range 用法,适用于多重键查找场景,精准获取上下界迭代器,避免多次查询开销。理解其与find、lower_bound的区别,实现高效搜索,值得收藏。

Instrulink的博客 459

C++ multimap 容器

在 C++ 中,multimap是标准库中的一个关联容器,它包含键值和映射值对,并且。multimap自动将其元素保持在排序顺序中,基于键的比较,这使得它非常适合用于需要存储一系列与单个键相关联的值的情况。

m0_64240990的博客 676

[C++ STL] 对 equal_range 使用 范围for

引述   使用map&lt;string,int&gt; ma;后可以创建一个map,因为map中所有键都是独一无二的,所以可以使用 [] 算符访问键值,如ma["Hello"]=1;   但是multimap访问键值就没那么方便了,multimap允许键重复,即同一键可能对应多个键值,因而multimap取消了 [] 算符. 通常已知键遍历multimap中的所有对应键值的方法有很多种...

airaou 789

c++ map/multimap容器

在C++中,std::map和std::multimap是两种关联容器,它们包含了可重复的(对于multimap)或唯一的(对于map)键值对。这些容器都根据它们的键自动排序,并允许非常快速地根据键查找、插入和删除元素。

Mitos的博客 776

C++ multimap的简单使用

这两天,有个任务中用到了C++的multimap,所以写了个小Demo /** *@File MultiMapDemo.cpp * *@Author: Bob * *@Create Time: 2016-12-1 11:57:06 * *@Last Modify: Bob * *@Last Modify Time: 2016-12-1 11:57:06 * *@Desc

菜鸟攻城狮 1万+

C++10.5 multimap和multiset类型---equal_range、lower_bound 和upper_bound函数

简介 multimap和multiset 类型对应的头文件也是map和set 头文件 multimap和multiset 所支持的操作分别与map和set 操作相同,只有一个例外:multimap 不支持下标操作。不能对multimap对象使用下标操作,引用在这类容器中,某个键可能对应多个值。 关联容器中map 和set 的元素是按顺序存储的。multimap和multiset也一样。因此,在mul

海螺上的斑点 5558

multimap equal_range函数的使用方法

#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;map&gt;using namespace std; struct userdevice{string m_devicename;string m_deviceid;int m_devicePopedom;};typedef multimap&lt;string,userd...

tulunta 1717

std::map和std::multimap的使用总结

Map和Multimap   Map和Multimap(下文统称Map)将key/value作为元素进行管理,逻辑上是一种键值映射关系,即数据结构中哈希表。它们可以根据key的排序规则进行自动元素排序,Multimap允许元素重复,而Map不允许。   在使用Map和Multimap之前, 必须引入头文件map #include&lt;map&gt;   在其中,map和multimap在s...

大山喵写博客的地方 1万+
上一篇: 模板编译失败?90%程序员忽略的递归终止条件设计原则,你中招了吗?
下一篇: 深入C++函数重载匹配机制:从编译器角度解读7个关键决策步骤
IterStream
博客等级 码龄1年 152粉丝 2112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值