即使边界键不存在,我是否可以遍历 std::map 键范围?
Can I iterate over an std::map key range even if the boundary keys don't exist?
我有一个std::map<int, object>
。
如果映射包含:
std::pair<1, obj1>
std::pair<3, obj2>
std::pair<4, obj3>
std::pair<6, obj4>
std::pair<8, obj5>
std::pair<9, obj6>
std::pair<14, obj7>
我可以从不存在的键迭代这个映射,比如i=5..10
(假设在映射中实际上没有任何键5和10)?我希望使用这些值来获得如下输出:
std::pair<6, obj3>
std::pair<8, obj3>
std::pair<9, obj3>
或者,是否有其他容器可以做到这一点?我不喜欢使用向量,因为在我的程序中,实际上包含值的键之间可能存在很大的间隙,而且我不想在只有几个项的情况下迭代数千个空索引。
您可以使用std::map
的lower_bound()
和upper_bound()
方法来定位与给定键最近的值的迭代器。有关这些方法如何工作的文档,请参阅您的c++书籍。
一旦获得了最近键的迭代器,就可以像往常一样进行迭代了。
相关文章:
- 遍历顺序由 std::文件系统directory_iterator给出
- 如何读/写或遍历 std::array 中的特定元素范围?
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 遍历 std::set 中包含的所有三重不同值?
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 如何在重复循环中循环遍历 std::vector
- 为什么 std::set 遍历所有元素的速度较慢?
- 如何遍历 std::variant 的类型?
- 遍历 std::variant 的映射
- 在 std::remove_if 执行期间遍历容器是否安全?
- 遍历 std::string 时如何获取没有数字的字符?
- std::unordered_set迭代器遍历的复杂性
- 使用std :: for_each的树遍历
- 如何使用单 for 循环遍历 std::map<string>int 和 std::vector<int>?
- 遍历std ::映射,效果少于迭代器之间的比较
- 同时遍历两个 std::lists
- 跟踪节点遍历调用 std::map::find
- C ++擦除std::vector.end(),同时循环遍历所有迭代器
- 使用相同的迭代器循环遍历两个 std::vector
- 如何遍历 std::tuple