c++ - 如何打印一系列元素(std::pair) 属于地图(不是所有元素)
问题描述
如何打印属于
我不需要打印所有元素的一系列元素(键和值)。
每一个使用 C++11、C++14 或 C++17 的建议,不带 boost 库,都值得赞赏。std::map<size_t, std::string>?
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
using namespace std;
void print(map<size_t, string> & m)
{
for(auto & [key, value] : m)
{
cout << setw(6) << left << key << value << endl;
}
}
void print_range(map<size_t, string> & m, size_t first, size_t last)
{
// ???
}
int main()
{
map<size_t, string> data {
{ 5, "guitar" },
{ 8, "saxophone" },
{ 28, "trumpet" },
{ 32, "trombone" },
{ 42, "violin" },
{ 45, "viola" },
{ 48, "cello" },
{ 52, "double bass" },
{ 100, "piano" },
{ 104, "drum" }
};
print(data);
print_range(data, 42, 52); // ???
return 0;
}
预期的输出是:
42 violin
45 viola
48 cello
52 double bass
解决方案
使用std::map::lower_bound()
和std::map::upper_bound()
auto p = make_pair(data.lower_bound(42), data.upper_bound(52));
for (auto [begin, end] = p; begin != end; begin++) {
std::cout << begin->first << " " << begin->second << '\n';
}
推荐阅读
- json - 传递类的DataType
- javascript - 操作 JSON 字符串
- python - 自定义距离的距离矩阵
- php - 有没有办法将 apache/PHP/.htaccess 设置为只返回错误 404 而不显示页面?
- ruby - 如何使用 yaml 文件中的属性作为控制器中方法的参数?
- c# - 如何使用 MigraDoc 让表情符号出现在生成的 PDF 中
- spring-boot - SpringBoot base64 pdf下载
- apache-kafka - TimeoutError {消息:“请求在 30000 毫秒后超时”,堆栈:“TimeoutError:请求在 30000 毫秒后超时
- android - 不兼容的类型:FirebaseMessagingService 无法转换为 Context
- c++ - 如何使用 cmake 设置 OpenCV 以启用动态和静态构建?