突破编程,突破编程壁垒

马肤

温馨提示:这篇文章已超过425天没有更新,请注意相关的内容是否还可用!

摘要:本文介绍了编程领域的突破。随着科技的不断发展,编程已成为现代社会不可或缺的一部分。不断出现的编程语言和工具,以及人工智能、机器学习等领域的快速发展,为编程领域带来了许多突破性的进展。这些突破不仅提高了编程效率和便捷性,还推动了各行各业的数字化转型和创新发展。

std::unordered_multimap 是一个基于哈希表的关联容器,它允许存储键值对形式的元素,并且允许键的重复,这意味着相同的键可以关联多个值,由于它主要关注高效的查找、插入和删除操作,因此不保证元素的任何特定顺序。

突破编程,突破编程壁垒 第1张

(图片来源网络,侵删)

std::unordered_multimapstd::multimap 的主要区别在于:std::multimap 是基于红黑树的有序容器,而std::unordered_multimap 则不保证元素的顺序,当对性能有较高要求,且不需要元素有序时,std::unordered_multimap 可能是更好的选择。

声明与初始化

声明

需要包含<unordered_map> 头文件,然后声明一个std::unordered_multimap 变量,并指定键和值的类型。

#include <unordered_map>
std::unordered_multimap<KeyType, ValueType> mapName;

其中KeyType 是键的类型,ValueType 是值的类型,mapName 是你为unordered_multimap 变量选择的名称。

初始化

初始化std::unordered_multimap 可以通过多种方式进行,包括默认初始化、使用列表初始化器初始化、复制初始化、移动初始化等。

突破编程,突破编程壁垒 第2张

默认初始化如果不提供任何初始化器,std::unordered_multimap 将被默认初始化,意味着它将不包含任何元素,并且会使用默认的哈希函数和键相等性比较对象。

使用列表初始化器初始化可以使用列表初始化器(大括号 {})来初始化std::unordered_multimap,并直接添加一些元素。

std::unordered_multimap<std::string, int> myMultimap = {  {"apple", 1},  {"banana", 2},  {"apple", 3} }; // 注意:允许相同的键。

在这个例子中,myMultimap 初始时包含三个元素,其中有两个元素具有相同的键 "apple"。

插入元素

插入操作是std::unordered_multimap 的核心功能之一,可以使用多种方法来插入元素:#### 插入方法(1)使用insert 成员函数:std::unordered_multimap 提供了一个insert 成员函数来插入元素,该函数接受一个键值对并将其添加到容器中,如果容器中已经存在具有相同键的元素,insert 函数仍然会插入新的键值对,因为std::unordered_multimap 允许键的重复,使用insert 函数插入单个键值对:可以使用insert 函数插入单个键值对,这通常通过创建一个std::pair 对象来实现,其中第一个元素是键,第二个元素是值。 ``cpp #include <iostream> #include <string> #include <unordered_map> int main() { std::unordered_multimap<std::string, int> myMultimap; // 插入单个键值对 myMultimap.insert(std::make_pair("apple", 10)); // 或者直接使用花括号初始化列表来构造 pair 对象 myMultimap.insert({"banana", 20}); return 0; }` 这个例子创建了一个std::unordered_multimap 对象myMultimap,并使用insert 函数插入了两个键值对,第一个键值对是 ("apple", 10),第二个键值对是 ("banana", 20)。#### (2)使用迭代器插入:除了直接使用insert 函数外,还可以使用迭代器来插入元素,如果插入成功,函数返回一个指向新插入元素的迭代器;如果插入失败(例如由于内存不足),则返回一个指向容器中下一个有效位置的迭代器。`cpp #include <iostream> #include <string> #include <unordered_map> int main() { std::unordered_multimap<std::string, int> myMultimap; // 在容器的开始位置尝试插入一个键值对 auto it = myMultimap.insert(myMultimap.begin(), std::make_pair("apple", 10)); return 0; }` 这个例子使用insert 函数的迭代器版本在容器的开始位置尝试插入一个键值对,返回的迭代器it 指向新插入的元素。#### (3)使用emplace 成员函数:除了insert 函数外,还可以使用emplace 函数直接在容器内部构造元素,避免了不必要的复制或移动操作,这对于大型对象或那些复制/移动成本较高的对象特别有用。``cpp struct LargeObject { std::string data; // ... 其他成员和数据 ... LargeObject(const std::string& data) : data(data) {} }; int main() { std::unordered_multimap<std


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码