这可能是一个愚蠢的问题,但是假设std::map
定义如下:
std::map<int, int> m;
是否有任何方法可以存储多个值并可以被单个key
访问?
发问动机:
std::map
具有count()
和equal_range()
之类的方法,这些方法将一个键作为参数,这种感觉就是单个键可以指定多个值。
答案 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::count
,std::multimap::count
)之间的相似性是由于在STL容器之间建立了相似的接口。
答案 2 :(得分:1)
不。 std::map
被设计为每个键具有一个值。
如果一个键需要多个值,则应使用std::multimap
。