C++之map的emplace与pair插入键值对用例(一百七十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中......】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

1.前言

本篇目的:map成员函数emplace与pair用法区别。

2. std::map容器的emplace函数和pair类型使用区别

  • emplace函数是std::map容器特有的成员函数,用于在容器中插入新的键值对。它接受键和值的构造函数参数,并直接构造键值对对象,避免了临时的pair对象的创建,从而提高了性能。
  • pair是一个模板结构体,定义了两个成员变量firstsecond,分别表示键和值。可以使用std::make_pair函数或直接使用花括号初始化来创建pair对象,并将其插入到std::map容器中。

3.应用实例

<1>.容器map的成员函数使用emplace函数插入键值对

cpp 复制代码
#include <iostream>
#include <map>

int main() {
    // 使用emplace函数插入键值对
    std::map<int, std::string> myMap;
    myMap.emplace(std::make_pair(1, "Apple"));
    myMap.emplace(std::make_pair(2, "Banana"));

    // 遍历第一个map容器
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }
    return 0;
}

<2>.使用pair对象插入键值对

cpp 复制代码
#include <iostream>
#include <map>
#include <utility>

int main() {
  // 创建一个std::map<std::pair<int, int>>,键是std::pair,值是int
  std::map<std::pair<int, int>, int> keyValueMap;

  // 向map中插入键值对
  keyValueMap.insert(std::make_pair(std::make_pair(1, 2), 100));
  keyValueMap.insert(std::make_pair(std::make_pair(3, 4), 200));
  keyValueMap.insert(std::make_pair(std::make_pair(5, 6), 300));

  // 遍历map并输出键值对
  for (const auto& kv : keyValueMap) {
    std::cout << "Key: (" << kv.first.first << ", " << kv.first.second << ")";
    std::cout << " Value: " << kv.second << std::endl;
  }

  return 0;
}

<3>.遍历map中的key-value

cpp 复制代码
int main() {
  std::map<string, string> mComponents;

  auto emplace = [&](const char *libPath) {
    mComponents.emplace(libPath, libPath);
  };

  // 添加元素到 map
  emplace("libcodec2_soft_aacdec.so");
  emplace("libcodec2_soft_aacenc.so");
  emplace("libcodec2_soft_amrnbdec.so");
  emplace("libcodec2_soft_amrnbenc.so");
  emplace("libcodec2_soft_amrwbdec.so");
  emplace("libcodec2_soft_amrwbenc.so");

  //1.使用auto关键字遍历
  for (const auto& kv : mComponents) {
    cout << "Key: " << kv.first << ", Value: " << kv.second << endl;
  }

  //2.使用iterator遍历
  std::map<std::string, std::string>::iterator it;
  for (it = mComponents.begin(); it != mComponents.end(); ++it) {
    std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
  }

  return 0;
}
相关推荐
ふり2 分钟前
图书管理系统
java·开发语言·intellij-idea
qq_124987075317 分钟前
Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)
java·开发语言·spring boot·毕业设计
煤炭里de黑猫17 分钟前
Lua C API:深入理解 lua_pushnumber 函数 — 将数字压入 Lua 栈中
开发语言·lua
Ciderw19 分钟前
LLVM编译器简介
c++·golang·编译·编译器·gcc·llvm·基础设施
哥坐11路22 分钟前
网络IP跳动问题解决详
开发语言·php
和光同尘@31 分钟前
74. 搜索二维矩阵(LeetCode 热题 100)
数据结构·c++·线性代数·算法·leetcode·职场和发展·矩阵
无人等人34 分钟前
CyberRT(apollo) IPC(shm)通信包重复/丢包 bug 及解决方案
c++·bug
Flower#36 分钟前
【模板】图论 最短路 (Floyd+SPFA+Dijkstra)
c++·图论
奔跑吧邓邓子1 小时前
【Python爬虫(27)】探索数据可视化的魔法世界
开发语言·爬虫·python·数据可视化
code bean1 小时前
【C# 数据结构】队列 FIFO
开发语言·数据结构·c#