温馨提示:这篇文章已超过425天没有更新,请注意相关的内容是否还可用!
摘要:本文介绍了编程领域的突破。随着科技的不断发展,编程已成为现代社会不可或缺的一部分。不断出现的编程语言和工具,以及人工智能、机器学习等领域的快速发展,为编程领域带来了许多突破性的进展。这些突破不仅提高了编程效率和便捷性,还推动了各行各业的数字化转型和创新发展。
std::unordered_multimap
是一个基于哈希表的关联容器,它允许存储键值对形式的元素,并且允许键的重复,这意味着相同的键可以关联多个值,由于它主要关注高效的查找、插入和删除操作,因此不保证元素的任何特定顺序。
(图片来源网络,侵删)
std::unordered_multimap
与std::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
可以通过多种方式进行,包括默认初始化、使用列表初始化器初始化、复制初始化、移动初始化等。
默认初始化如果不提供任何初始化器,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
还没有评论,来说两句吧...