当我想在C ++中遍历地图时,我们可以使用以下技术:
for (auto i = m.begin(); i != m.end(); i++)
{ ... ... }
为什么我们不能使用以下内容:
for (auto i = m.begin(); i < m.end(); i++)
{ ... ... }
我的猜测是,关联容器中的元素没有像顺序容器那样按顺序存储,对吗?
答案 0 :(得分:6)
比较运算符<
要求random access iterators。
map
仅提供双向迭代器。原因是,您不能仅用这样的迭代器来确定在恒定时间内是否存在另一个迭代器(是的,它们在内存中不是一个接一个的)。
由于!=
对所有类型的迭代器均有效,因此请使用它代替<
版本。如果您更改容器类型,它是便携式的。