std::map

C++——std::Map 写在前面: 有一段时间没有继续进行C++容器的学习了。这次接着C++-std::Vector 的内容继续学习。通过之前的vector的学习,我发现虽然对该容器有一个比较全面的认识,但是很多细节还是不能注意好。比如在 LeetCode-406. Queue Reconstruction by Height 这道题中使用vector的insert函数,而我之前的方法由于没有把握好erase函数的使用... 阅读详情

std::map

介绍

成员函数

非成员函数

介绍

// map 模板定义
template<class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T>>> class map;	
namespace pmr {
    template< class Key, class T, class Compare = std::less<Key> >
    using map = std::map<Key, T, Compare, std::pmr::polymorphic_allocator<std::pair<const Key, T>>>
}
  • std::map 介绍摘选自 cppreference.com 中文网 std::map 介绍
  • std::map 是有序键值对容器,它的元素的键是唯一的
  • 用比较函数 Compare 排序键、搜索、移除和插入操作拥有对数复杂度
  • map 通常实现为红黑树
  • 标准库使用比较 (Compare) 概念时用等价关系确定唯一性
  • 不精确地说,如果两个对象 a 与 b 相互不比较小于对方:!comp(a, b) && !comp(b, a),那么认为它们等价

成员函数

构造析构
#include <QCoreApplication>
#include <algorithm>
#include <iostream>
#include <map>
#include <string>

auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1; //默认构造
  Print("m1", m1);

  std::allocator<std::pair<int, int>> alloc;
  std::less<int> cmp;
  map_int m2(cmp, alloc); //设置比较器和分配器
  Print("m2", m2);

  map_int m3(alloc); //设置分配器
  Print("m3", m3);

  map_int m4{{2, 2}, {3, 3}, {4, 4}};
  Print("m4", m4);
  map_int m5(m4.begin(), m4.end()); //迭代器初始化
  Print("m5", m5);

  map_int m6(m5); //拷贝构造初始化
  Print("m6", m6);

  map_int m7(std::move(m6)); //移动构造初始化
  Print("m7", m7);

  map_int m8{{2, 2}, {3, 3}, {4, 4}}; //初始化列表
  Print("m8", m8);

  //析构函数默认
  return 0; // a.exec();
}

输出结果:
m1 :
m2 :
m3 :
m4 : 2 - 2 3 - 3 4 - 4
m5 : 2 - 2 3 - 3 4 - 4
m6 : 2 - 2 3 - 3 4 - 4
m7 : 2 - 2 3 - 3 4 - 4
m8 : 2 - 2 3 - 3 4 - 4

元素访问
auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1{{100, 10}, {200, 20}, {300, 30}, {400, 40}, {500, 50}};
  Print("m1", m1);

  std::cout << "m1.at(100) : " << m1.at(100) << std::endl;
  std::cout << "m1.at(300) : " << m1.at(300) << std::endl;
  std::cout << "m1.at(500) : " << m1.at(500) << std::endl;

  std::cout << "m1[100] : " << m1[100] << std::endl;
  std::cout << "m1[300] : " << m1[300] << std::endl;
  std::cout << "m1[500] : " << m1[500] << std::endl;

  return 0; // a.exec();
}

输出结果:
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1.at(100) : 10
m1.at(300) : 30
m1.at(500) : 50
m1[100] : 10
m1[300] : 30
m1[500] : 50

迭代器
auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1{{100, 10}, {200, 20}, {300, 30}, {400, 40}, {500, 50}};
  Print("m1", m1);

  map_int::iterator iter = m1.begin();
  std::cout << "m1 : ";
  for (; iter != m1.end(); ++iter) {
    std::cout << iter->first << " - " << iter->second << "\t";
  }
  std::cout << "\n";

  map_int::const_iterator citer = m1.begin(); //返回指向起始的迭代器
  std::cout << "m1 : ";
  for (; citer != m1.end(); ++citer) {
    std::cout << citer->first << " - " << citer->second << "\t";
  }
  std::cout << "\n";

  map_int::reverse_iterator rbiter = m1.rbegin(); //返回指向起始的逆向迭代器
  std::cout << "m1 : ";
  for (; rbiter != m1.rend(); ++rbiter) {
    std::cout << rbiter->first << " - " << rbiter->second << "\t";
  }
  std::cout << "\n";

  map_int::const_reverse_iterator crbiter = m1.crbegin(); //返回指向起始的迭代器
  std::cout << "m1 : ";
  for (; crbiter != m1.crend(); ++crbiter) {
    std::cout << crbiter->first << " - " << crbiter->second << "\t";
  }
  std::cout << "\n";

  return 0; // a.exec();
}

输出结果:
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1 : 500 - 50 400 - 40 300 - 30 200 - 20 100 - 10
m1 : 500 - 50 400 - 40 300 - 30 200 - 20 100 - 10

容量
auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1{{100, 10}, {200, 20}, {300, 30}, {400, 40}, {500, 50}};
  Print("m1", m1);

  //检查容器是否为空
  std::cout << std::boolalpha << "m1.empty() : " << m1.empty() << std::endl;

  std::cout << "m1.size() : " << m1.size() << std::endl; //返回容纳的元素数
  std::cout << "m1.max_size() : " << m1.max_size()
            << std::endl; //返回可容纳的最大元素数,和平台有关

  return 0; // a.exec();
}

输出结果:
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1.empty() : false
m1.size() : 5
m1.max_size() : 461168601842738790

修改器
auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1{{100, 10}, {200, 20}, {300, 30}, {400, 40}, {500, 50}};
  Print("m1", m1);

  m1.clear(); //  清除内容
  Print("m1", m1);
  m1.insert(std::pair<int, int>(1, 10)); //插入元素或结点
  m1.insert({2, 20});
  Print("m1", m1);
  m1.emplace(3, 30); //原位构造元素
  m1.emplace(4, 40);
  Print("m1", m1);

  m1.emplace_hint(m1.end(), 5, 50); //使用提示原位构造元素
  m1.emplace_hint(m1.end(), 6, 60);
  m1.emplace_hint(m1.end(), 7, 70);
  Print("m1", m1);
  m1.erase(m1.begin());
  Print("m1", m1);
  
  return 0; // a.exec();
}

输出结果:
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1 :
m1 : 1 - 10 2 - 20
m1 : 1 - 10 2 - 20 3 - 30 4 - 40
m1 : 1 - 10 2 - 20 3 - 30 4 - 40 5 - 50 6 - 60 7 - 70
m1 : 2 - 20 3 - 30 4 - 40 5 - 50 6 - 60 7 - 70

查找
auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1{{100, 10}, {200, 20}, {300, 30}, {400, 40}, {500, 50}};
  Print("m1", m1);

  std::cout << "m1.count() : " << m1.count(300)
            << std::endl; //返回匹配特定键的元素数量
  auto it = m1.find(200); //寻找带有特定键的元素
  if (it == m1.end()) {
    std::cout << "m1.find(200) : m1.end()" << std::endl;
  } else {
    std::cout << "m1.find(200) : " << it->first << " - " << it->second
              << std::endl;
  }

  //返回容器中所有拥有给定关键的元素范围。范围以二个迭代器定义,一个指向首个不小于
  // key 的元素,另一个指向首个大于 key 的元素。首个迭代器可以换用 lower_bound()
  //获得,而第二迭代器可换用 upper_bound() 获得
  std::pair<map_int::iterator, map_int::iterator> pa =
      m1.equal_range(100); //返回匹配特定键的元素范围

  std::cout << pa.first->first << " - " << pa.first->second << std::endl;
  std::cout << pa.second->first << " - " << pa.second->second << std::endl;

  map_int::iterator lit =
      m1.lower_bound(300); //返回指向首个不小于给定键的元素的迭代器
  std::cout << "m1.lower_bound(300) : " << lit->first << " - " << lit->second
            << std::endl;

  lit = m1.upper_bound(100); //返回指向首个大于给定键的元素的迭代器
  std::cout << "m1.upper_bound(100) : " << lit->first << " - " << lit->second
            << std::endl;
  return 0; // a.exec();
}

输出结果:
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m1.count() : 1
m1.find(200) : 200 - 20
100 - 10
200 - 20
m1.lower_bound(300) : 300 - 30
m1.upper_bound(100) : 200 - 20

非成员函数

auto Print(const std::string &msg, const std::map<int, int> &lst) {
  std::cout << msg << " : ";
  for (const auto &pa : lst) {
    std::cout << pa.first << " - " << pa.second << "\t";
  }
  std::cout << "\n";
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  using map_int = std::map<int, int>;
  map_int m1{{100, 10}, {200, 20}, {300, 30}, {400, 40}, {500, 50}};
  map_int m2{{100, 1}, {200, 2}, {300, 3}, {400, 4}, {500, 5}};
  Print("m1", m1);
  Print("m2", m2);

  std::cout.setf(std::ios::boolalpha);
  std::cout << "m1 == m2 : " << (m1 == m2) << std::endl;
  std::cout << "m1 != m2 : " << (m1 != m2) << std::endl;
  std::cout << "m1 > m2 : " << (m1 > m2) << std::endl;
  std::cout << "m1 >= m2 : " << (m1 >= m2) << std::endl;
  std::cout << "m1 < m2 : " << (m1 < m2) << std::endl;
  std::cout << "m1 <= m2 : " << (m1 <= m2) << std::endl;
  std::cout.unsetf(std::ios::boolalpha);
  // c++20 废弃以上操作符重载,提供三路运算符 operator <=> ()

  std::swap(m1, m2);
  Print("m1", m1);
  Print("m2", m2);

  return 0; // a.exec();
}

输出结果:
m1 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50
m2 : 100 - 1 200 - 2 300 - 3 400 - 4 500 - 5
m1 == m2 : false
m1 != m2 : true
m1 > m2 : true
m1 >= m2 : true
m1 < m2 : false
m1 <= m2 : false
m1 : 100 - 1 200 - 2 300 - 3 400 - 4 500 - 5
m2 : 100 - 10 200 - 20 300 - 30 400 - 40 500 - 50

起始

C++ std::map几种遍历方式(正序、倒序) C++ std::map几种遍历方式(正序、倒序) 1、map 的定义方式 2、正序遍历 map 2.1 使用 for 循环 2.2 使用 while 循环 3、倒序遍历 map 3.1 使用 for 循环 3.2 使用 while 循环 4、使用 std::greater 属性,直接定义倒序存储的 map 4.1 使用 for 循环 4.2 使用 while 循环 阅读详情

相关推荐

C++——std::Set

写在前面: 在写这篇博客之前吐个槽,其实也可不不用这么麻烦这么写博客。讲道理其实在书本上学这些知识应该挺快的。可以书上看一遍记个大概,然后做题的过程中,不断遇见各种小知识,这样分散的积累,然后一定规模后,就可以系统的整理。但是现在先花时间来做这件事,其实也可以,建立主体的框架,后面再慢慢细化丰富。也没必要想那么多,慢慢来。不管方法是什么,重要的是每天要做点事。那么这篇博客学习set容器。目前学习...

zy2317878的博客 2556

C++基础之std::map

Cartographer中要用到这里,之前都是直接用,了解不深,现在补,这里是纯搬的,手写一遍加深印象,源地址如下: 参考 std::map 容器使用详细说明_学之之博未若知之之要知之之要未若行之之实的博客-优快云博客_std::map使用 概述: Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织.

YGG12022的博客 3万+

C++(10): std::map、std::multimap与std::unordered_map

std::map、std::multimap 和 std::unordered_map 是 C++ 标准模板库(STL)中的三种关联容器,它们提供了存储键值对(pair)的方式,并允许通过键来快速检索值。这三者之间的主要区别在于它们的内部数据结构和对元素的排序方式。

tecsai的博客 2573

C++ std:map深入解析与用法指南

C++ std::map 深入解析与用法指南

weixin_74396256的博客 6844

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

利用std::map和std::greater对key进行降序排列

std::map默认是用std::less对key进行升序排列的,利用std::greater可以对key进行降序排序。 在Qt中,如果我们需要对QString或者int为key的map进行降序排列,除了自定义类型外,其实还可以利用std::map和std::greater实现 代码: #include <QCoreApplication> #include <map> #include <algorithm> #include <QDebug> int

斧冰 4083

std::map和std::unordered_map

std::map 和 std::unordered_map 是 C++ 标准库中的两个容器,用于实现键值对的关联。它们之间的主要区别在于底层实现和性能特征。底层实现:std::map 是基于红黑树(一种平衡二叉搜索树)实现的有序映射容器,而 std::unordered_map 是基于哈希表实现的无序映射容器。排序:std::map 中的元素是按照键的排序顺序进行存储的,因此在遍历时会按照键的升序输出。而 std::unordered_map 中的元素是根据哈希函数计算的哈希值存储的,没有固定的顺序。

耶律大石的博客 2101

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8944

c++11:std::map与std::unordered_map(hash map)的区别

本质区别在于std::map底层使用红黑树,而std::unordered_map使用的是hash map。 1、std::map 头文件:<map> 类声明: template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T> > > c

李白 2404

博途WinCC上位机避坑指南:从工控机选型到趋势图优化的完整流程

本文详细解析了博途WinCC上位机开发全流程,从工控机选型到趋势图优化的关键技巧。针对工业自动化场景,提供硬件配置指南、网络优化方案和性能提升策略,帮助工程师避开常见陷阱,实现稳定高效的HMI系统部署。特别强调PC Station与传统触摸屏的选型对比及SIMATIC NET配置优化。

pp12345的博客 278

伪傻瓜式安装sql server2008【附带安装包】

安装各式各样的软件无疑是学习过程中…较…为烦躁的一部分 木有醋 但还是开始吧 为什么这是伪呢? 因为刚开始天真无邪的我真的是傻瓜式安装(迷之自信),结果就B了(打开配置管理器的瞬间….一片空白) BaiduCloud分享 红领巾在何方?? Link链接:https://pan.baidu.com/s/1NZCxP0Y27dBPrgHoRWLDyQ...

EuniBoom的博客 6万+

【std::map】与std::unordered_map差异

本文对比了C++ STL中的map和unordered_map两种关联容器。map基于红黑树实现,保持键有序,性能稳定;unordered_map基于哈希表实现,无序但平均性能更优。

优快云_RTKLIB的博客 688

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

【std::map】与std::unordered_map操作差异

本文对比了C++中unordered_map和map的核心操作差异。

优快云_RTKLIB的博客 876

VS2015+C++实战:手把手教你用海康MVS里的Demo搞定多相机同步采图与保存

本文详细解析了在VS2015+C++环境下,利用海康威视MVS工业相机SDK实现多相机同步采图与保存的全流程。从环境准备、SDK选择到多相机初始化、同步采图方案,再到异常处理与性能优化,提供了实战技巧和代码示例,帮助开发者快速掌握工业相机二次开发的核心技术。

weixin_29170327的博客 281

LabVIEW多设备采集实战:1个程序同时控制3个RS485 Modbus仪表

本文详细介绍了如何使用LabVIEW实现多设备RS485 Modbus同步采集,涵盖硬件架构设计、多线程通信框架搭建、数据帧解析技巧及性能优化策略。通过实际项目案例,展示如何解决端口冲突、数据解析错误等工业自动化常见问题,提升采集系统实时性与可靠性。

qsc901234的博客 302

超级简单易懂!!!std::map 和 std::unordered_map的区别!

C++标准模板库(STL)提供了多种容器类型,用于存储和管理数据集合。其中,`std::map`和`std::unordered_map`是两种常用的关联容器,它们都允许用户通过键来存取值。

Eason_jun的博客 1478

Google Earth Engine :处理Sentinel-1 GRD SAR数据以估算田间尺度土壤湿度的工作流程(计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB))

本文介绍了利用Google Earth Engine (GEE)处理Sentinel-1 SAR数据估算田间土壤湿度的方法。工作流程包括:定义研究区域并筛选指定日期、轨道参数的Sentinel-1图像;预处理计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB),通过均值滤波降噪并去除无效像素;结合动态世界数据集掩膜水体/城市区域;最终导出时序GeoTIFF文件。DpRVIc基于双极化后向散射系数比,对植被结构敏感,而VVdB反映地表反射特性,二者结合可有效评估土壤湿度。该方法适用于农业监

此星光明博客 383

《C++——std::map》

在 C++ 标准模板库(STL)中,std::map 是一个非常实用的关联容器,它以键值对(key-value)的形式存储数据,并能自动按照键(key)进行排序。无论是存储配置信息、建立映射关系还是实现字典功能,std::map 都是开发者的得力助手。本文将带你从零开始,快速掌握 std::map 的使用方法。

fwfxhhx的博客 1259

把 LLM 编排能力塞进 ABAP 系统里,ZLLM 仓库的工程价值与 SAP 落地场景

ZLLM项目将LLM应用开发中的常见工程问题引入ABAP原生环境,为SAP系统提供AI工作流构建能力。它类似ABAP版的LangChain,支持Chain组合、Prompt模板、状态传递等核心功能,强调纯ABAP实现、延迟执行以及与ABAP数据结构的深度集成。项目包含工厂类、LLM客户端、负载均衡器等模块,特别设计了能处理ABAP内表和结构的模板引擎,使业务数据可直接用于Prompt生成。通过Step和Flow机制支持复杂业务过程编排,并采用延迟执行和并行处理优化批量任务性能。该项目为ABAP开发者提供了在

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

std::set、std::map 和 std::unordered_map

是常用的关联容器,但它们在实现方式、性能和应用场景上有显著差异。需要唯一元素的有序集合,支持快速插入、删除和范围查询(如日期排序、唯一用户ID管理)。需要额外空间处理哈希冲突(如负载因子控制),通常内存占用更高,但实际访问速度更快。需要高速哈希查找的场景,如缓存系统、字典(键值对频繁访问且无需顺序)。内存占用相对较高,但结构紧凑,节点存储父节点、子节点指针和颜色标记。插入或删除元素时,只有被操作的节点的迭代器失效,其他迭代器不受影响。需要键值对的有序映射,如配置项存储(键为字符串,值为整数)。

m0_74374651的博客 579

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

性能上综合分析,std::map与 std::unordered_map的应用场景

选择std::map还是如果你需要有序的数据集合,或者需要稳定的迭代器,那么std::map是一个好选择。如果你需要快速的查找速度,并且不关心数据的顺序,那么可能更适合你的需求。

weixin_44126836的博客 1172

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

std::unordered_map 和 std::map的区别【C++】

std::map基于红黑树实现,支持有序遍历。查找、插入和删除操作的平均时间复杂度为 O(log n)。适用于需要按键的顺序访问元素或进行范围查询的场景。基于哈希表实现,不保证顺序。查找、插入和删除操作的平均时间复杂度为 O(1)。适用于需要快速查找、插入和删除操作的场景。选择哪种容器取决于你的具体需求,例如是否需要有序遍历、是否需要高效查找等。

weixin_51568145的博客 469

std::map std::unordered_map 性能测试

先上图:win7 vs2013 debug版本: win7 vs2013 release版本: centos7.0 gcc4.8.5 -g  (我是在虚拟机里,内存比较少,所以只分配了两万个): 从测试结果可以看出:std::unordered_map插入、删除的性能会比std::map稍差一点,但是查找速度std::unordered_map和std::map的比例基本

uniqs 的博客 5289

c++ std容器 std::map,std::vector,std::list,std::set初始化

在C++中,std::map是一个关联容器,它存储的元素是键值对(key-value pairs),其中每个键在容器中都是唯一的。你可以使用多种方法来初始化std::map<std::string, double>。以下是一些示例:默认初始化:创建一个空的std::map。使用初始化列表:在声明的同时使用初始化列表来填充std::map。使用insert成员函数:创建一个空的std::map然后使用insert成员函数来添加元素。

m0_47136986的博客 1954

std::map用法详解以及实现

std::map 是 C++ 标准模板库(STL)中的一个关联容器,用于存储键值对(key-value pairs),其中每个键都是唯一的,并且按照特定的顺序(通常是升序)自动排序。std::map 通常基于红黑树实现,提供对元素的高效查找、插入和删除操作默认情况下,std::map 使用 < 运算符对键进行排序。如果需要自定义排序方式,可以提供一个自定义的比较函数或函数对象首先需要有一个data存储键值对另外需要关乎一点如果出现两个不同的key经过哈希运算后得到相同的桶索引,这种情况成为哈希冲突。

xushiliming_0419的博客 1043
上一篇: std::forward_list
下一篇: std::multimap
无夜_
博客等级 码龄7年 2916粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值