五月标准::映射键地址值数

May std::map key address number of values?

本文关键字:地址 映射 标准 五月      更新时间:2023-10-16
这可能是

一个有点愚蠢的问题,但假设std::map定义如下:

 std::map<int, int> m;

有没有办法存储多个值并可供单个key访问?

提问动机:

std::map具有像 count()equal_range() 这样的方法,它们将键作为参数获取,这种感觉是单个键可以指定多个值。

这些

方法的存在是为了提供与其他关联容器的通用接口,这些容器确实允许每个键有多个值(例如std::multimap这正是您要查找的(。

这使得通常(即使用模板(实现算法比其他方式容易得多,并且以这种方式设计它不会丢失任何价值。

的确,在std::map的情况下,count()只能给你零或一(除非你使用透明键,这是另一壶鱼(。

C++20 将引入 std::map::contains() ,这或多或少是一种count() == 1的检查——这似乎是为了解决人们的担忧,即函数count()对于一个std::map来说是一种奇怪的事情。

有没有办法存储多个值并可供单个key访问?

std::map不同,这些对象每个键只存储一个值,但std::multimap可以存储每个键可变数量的值。

两种类型之间的相似之处(例如 std::map::countstd::multimap::count(是由于在STL容器之间建立了类似的接口。

No. std::map设计为每个键一个值。如果希望一个键有多个值,则应使用 std::multimap