可以std :: map键地址的值数量吗?

时间:2019-02-07 10:55:28

标签: c++

这可能是一个愚蠢的问题,但是假设std::map定义如下:

 std::map<int, int> m;

是否有任何方法可以存储多个值并可以被单个key访问?

发问动机:

std::map具有count()equal_range()之类的方法,这些方法将一个键作为参数,这种感觉就是单个键可以指定多个值。

3 个答案:

答案 0 :(得分:3)

存在这些方法是为了为其他关联容器提供公共接口,该容器确实允许每个键使用多个值(例如std::multimap正是您所要的)。

这使得通用(即使用模板)算法的实现比以前容易得多,并且通过这种方式设计不会损失任何价值。

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

C ++ 20将引入std::map::contains(),这或多或少是对count() == 1的检查-这似乎是为了解决有关功能count()有点像对于std::map来说特别不可思议的事情。

答案 1 :(得分:2)

  

是否有任何方法可以存储多个值并可以被单个key访问?

std::map不适用,这些对象每个键仅存储一个值,而std::multimap每个键可以存储可变数量的值。

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

答案 2 :(得分:1)

不。 std::map被设计为每个键具有一个值。 如果一个键需要多个值,则应使用std::multimap