遍历 std::map 小于迭代器之间的比较
traverse the std::map with less than comparison between iterators
当我想在C++中遍历一个map时,我们可以使用以下技巧:
for (auto i = m.begin(); i != m.end(); i++)
{ ... ... }
为什么我们不能改用以下内容:
for (auto i = m.begin(); i < m.end(); i++)
{ ... ... }
我的猜测是因为关联容器中的元素不像顺序容器那样按顺序存储,对吗?
比较运算符 <
需要 random access iterators.
map
只提供双向迭代器。原因是你不能只用这样一个迭代器来判断另一个迭代器在常数时间内是在之前还是之后(是的,它们在内存中不是一个接一个)。
由于 !=
适用于所有类型的迭代器,因此请使用它代替 <
版本。如果您更改容器类型,它是便携式的。
当我想在C++中遍历一个map时,我们可以使用以下技巧:
for (auto i = m.begin(); i != m.end(); i++)
{ ... ... }
为什么我们不能改用以下内容:
for (auto i = m.begin(); i < m.end(); i++)
{ ... ... }
我的猜测是因为关联容器中的元素不像顺序容器那样按顺序存储,对吗?
比较运算符 <
需要 random access iterators.
map
只提供双向迭代器。原因是你不能只用这样一个迭代器来判断另一个迭代器在常数时间内是在之前还是之后(是的,它们在内存中不是一个接一个)。
由于 !=
适用于所有类型的迭代器,因此请使用它代替 <
版本。如果您更改容器类型,它是便携式的。