一个有点愚蠢的问题,但假设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::count
,std::multimap::count
(是由于在STL容器之间建立了类似的接口。
No. std::map
设计为每个键一个值。如果希望一个键有多个值,则应使用 std::multimap
。