c++ std::map获取最高键低于X的元素?

标签 c++ c++11 stl stdmap

给定一个键为整数的 C++ 映射(或多重映射),是否可以使用 STL 请求其键为低于给定数字的最大数字的元素范围?

如果我有:

map = {{1,'x'}, {2, 'g'}, {3, 'n'}, {3, 'm'}, {4, 'z'}, {5, 'a'}}

我想找到 4 之前的元素,它会返回:

{{3, 'n'}, {3, 'm'}}

(我对 std::map 更感兴趣,但也保留了 std::multimap 的一般性问题)。

最佳答案

您可以使用 lower_bound() 找到您想要的元素之后的第一个元素,然后递减迭代器并使用 equal_range() 访问匹配该元素的所有元素一:

代码

#include <iostream>
#include <map>

int main()
{
   std::multimap<int, char> const
       m{{1,'x'}, {2,'g'}, {3,'n'}, {3,'m'}, {4,'z'}, {5 'a'}};

   auto i = m.lower_bound(4);
   if (i == m.begin()) {
       std::cerr << "No elements less than 4 were found\n";
   } else {
       --i;
       auto const range = m.equal_range(i->first);
       for (auto j = range.first;  j != range.second;  ++j)
           std::cout << j->first << ", " << j->second << '\n';
   }
}

输出

3, n
3, m

关于c++ std::map获取最高键低于X的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41169003/

相关文章:

c++ - C++ 中的 set<pair> 和 map 有什么区别?

c++ - 多重映射迭代器不工作

c++ - boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error>>

C++ 编程家庭作业(do...while 循环)

C++:部分应用的困难

c++ - 组合字符串 vector

c++ - 如何使用 boost.asio 解析 ftp 站点?

c++ - SIGABRT 和线程相关的异常,但在调试期间工作正常

c++ - 结构可以在方法体内声明,但前提是它不包含成员字段初始值设定项。编译器错误与否?

c++ - 在集合上调用成员方法