在 std::map 中,获取一个指向不大于 key 的最后一个元素的迭代器

2024-01-13

提问前:我理解的意思std::map::lower_bound http://en.cppreference.com/w/cpp/container/map/lower_bound and std::map::upper_bound http://en.cppreference.com/w/cpp/container/map/upper_bound

问题:如何获得一个指向不大于 key 的最后一个元素的迭代器。

以下示例显示了 lower_bound/upper_bound 的当前行为。

但是,我想要:

  • 传入“20”,返回20
  • 传入“25”,返回20

我怎样才能实现这个目标?

#include <iostream>
#include <map>

int main ()
{
  std::map<int,char> mymap;
  std::map<int,char>::iterator itlow,itup;

  mymap[10]='a';
  mymap[20]='b';
  mymap[30]='c';
  mymap[40]='d';
  mymap[50]='e';

  itlow=mymap.lower_bound (20);  // itlow points to 'b'  
  std::cout << "lower_bound for 20:    " << itlow->first << " => " << itlow->second << '\n';

  itup=mymap.upper_bound (20);   // itup points to 'c'
  std::cout << "upper_bound for 20:    " << itup->first << " => " << itup->second << '\n';


  itlow=mymap.lower_bound (25);  // itlow points to 'c'  
  std::cout << "lower_bound for 25:    " << itlow->first << " => " << itlow->second << '\n';

  itup=mymap.upper_bound (25);   // itup points to 'c'
  std::cout << "upper_bound for 25:    " << itup->first << " => " << itup->second << '\n';


  return 0;
}

这是上面代码的执行结果。

lower_bound for 20:    20 => b
upper_bound for 20:    30 => c
lower_bound for 25:    30 => c
upper_bound for 25:    30 => c

该荣誉属于@rlbond。

  • 使用 upper_bound ,然后将迭代器减一;

  • 如果从 upper_bound 返回的迭代器指向map.begin(),则意味着映射中没有小于参数的元素。

再次感谢

#include <iostream>
#include <map>

int main ()
{
  std::map<int,char> mymap;

  mymap[10]='a';
  mymap[20]='b';
  mymap[30]='c';
  mymap[40]='d';
  mymap[50]='e';

  int nValue = 25;

  std::map<int,char>::const_iterator it=mymap.upper_bound (nValue);
  if(it != mymap.begin())
  {
      it--;
      std::cout << "last element no greater than " << nValue << " is :    " << it->first << " => " << it->second << '\n';
  }
  else
  {
      std::cout << "no element is less than " << nValue << '\n';
  }

  return 0;
}

结果给出:

last element no greater than 25 is :    20 => b

Explain:

如果没有找到这样的元素,就会返回map.end(),但是只要不是指向map.begin(),指向map.end()的迭代器仍然可以递减,然后指向所需的元素。

两个测试用例:

  • 将 nValue 更改为 60 并运行代码(在本例中,upper_bound 将返回 map.end()),您将得到“50 => e”,这是正确的。
  • 注释掉5个map set语句,留下一个空map进行测试,那么map.end()和map.begin()是一样的,upper_bound会返回map.end(),会打印“没有元素小于XX”。还是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 std::map 中,获取一个指向不大于 key 的最后一个元素的迭代器 的相关文章

随机推荐

  • CakePHP 3 控制器事件实现示例

    CakePHP 3 0 文档包含如何使用模型创建事件的示例 我试了又试 但它不适合我 有谁有使用自定义事件的 CakePHP 3 x 示例 其中控制器在触发事件的控制器中设置变量 假设我们有一个管理仪表板 您希望使用事件将一些代码注入其中
  • 我真的需要为 const 对象实现用户提供的构造函数吗?

    我有代码 class A public A default private int i 1 int main const A a return 0 它在 g 上编译得很好 参见ideone http ideone com PryGs5 但在
  • 看不到远程分支

    我仍在学习 git 不确定一些基本的东西是如何工作的 我通过执行以下操作创建了本地分支 git branch AppStore 我不记得如何将该分支推送到 github com 但我可以在存储库上看到 MyBranch 当我做 git br
  • AngularJS 模块和外部控制器

    我有一个包含多个容器的页面 每个容器都有自己的控制器 但指向一个工厂 该工厂处理与 Web 服务 API 交互的所有逻辑 我想为每个控制器都有一个单独的文件BUT我希望所有这些都在一个模块中 我一生都找不到如何将不同文件中的控制器包含到一个
  • 我无法运行超过 100 个进程

    我有大量的 shell 命令通过授权服务的 AuthorizationExecuteWithPrivileges 调用以 root admin 权限执行 问题是 一段时间后 10 15 秒 可能是 100 个 shell 命令 程序停止响应
  • iOS 7 启动图像,仅在设备上显示黑屏

    我至少在 stakoverflow 检查了与此问题相关的所有问题 答案 但没有任何成功 到目前为止我的问题是 我创建了一个新的应用程序 目标 IOS 7 并且我在图像中添加了我的启动图像和我的应用程序图标 xcassets 文件夹 当我在模
  • Eigen:返回对带有编译时维度检查的矩阵块的引用

    我要问的是一个概括这个问题 https stackoverflow com questions 13548253 eigen library return a matrix block in a function as lvalue 具体来
  • 在 UITableViewCell 内编辑 UITextField 时禁用 UITableView 自动滚动

    我正在使用自定义UITableViewCell在我的里面UITableView 这些中的每一个UITableViewCells 相当高并且包含UITextField在顶部 当用户点击UITextField为了编辑它 会出现一个键盘 然后UI
  • C++ 中的静态函数调用非静态函数 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一堂课 比如 Class Tes
  • Spring 4 Websocket - 没有任何反应

    我正在学习 spring 4 websocket 如果有人可以指导我逐步学习 spring 4 websocket 或者可以推荐一些书籍 让我可以在其中找到有关上述主题的逐步实用方法 我将非常感激 但在此之前 我尝试使用 tomcat 8
  • 如何解释 PyPi 包名称中的命名约定

    这可以在许多软件包中找到 例如这个 https pypi python org pypi pip https pypi python org pypi pip pip 9 0 1 py2 py3 none any whl 如何解释这个命名约
  • Rails 4 - 如果条件不适用

    我想创建一个具有某些条件的范围 其中返回的不是特定范围 目前 该解决方案有效 scope my scope gt my var scope where TRUE if my var condition1 scope scope where
  • 是否有可用于 ASP.NET MVC 开发的附加库或工具?

    我的第一次经历ASP NET MVC实体框架引起了我对这个框架的兴趣 我想实现一些基本的应用程序 涵盖现实世界 Web 应用程序的基本要求 到目前为止 VS 2008 提供的支持已经令人印象深刻 然而 对于某些领域 使用现有的附加组件或各种
  • 通过 ES6 模块导入加载和使用旧版 JS 模块(例如 IIFE)

    I have IIFE https developer mozilla org en US docs Glossary IIFE旧应用程序中需要适用于 IE10 的某些库代码的函数 无 ES6 模块加载等 但是 我开始开发一个将使用 ES6
  • 如果我想添加 CSS 我应该将其粘贴到哪里?

    这是我需要添加 CSS 的页面 http upload wikimedia org wikipedia commons a a5 Map of USA with state names svg http upload wikimedia o
  • 如何从android中的recyclerView中删除项目

    在我的应用程序中 我应该使用 recyclerView 并删除一些项目 我想从中删除一些项目recyclerview为此 我在以下代码中编写Adapter public class MyAdapter extends RecyclerVie
  • Rails 数据禁用-带有重新启用按钮

    我有一个具有 JavaScript 验证功能的 Rails Devise 表单 当用户按下提交时 验证就会开始工作 并且用户会重新关注他们需要的表单 但是 rails 使用 data disable with 在单击按钮后禁用该按钮 因此在
  • 对函数中的变量进行分组

    我有一种感觉 这是如此明显 当 如果 解决时我会感到羞愧 但我就是无法让它发挥作用 我有一个 html javascript 页面 其中包含多个项目 所有项目都需要通过用户点击来显示或隐藏 所以我有 x 数量的 div 例如 div sty
  • 如何测试一个python模块是否已导入?

    如何测试Python中的模块是否已导入 例如我需要基础知识 if not has imported sys import sys also if not has imported sys path from sys import path
  • 在 std::map 中,获取一个指向不大于 key 的最后一个元素的迭代器

    提问前 我理解的意思std map lower bound http en cppreference com w cpp container map lower bound and std map upper bound http en c