) 属于地图(不是所有元素),c++,c++11,c++14,c++17"/>

首页 > 解决方案 > 如何打印一系列元素(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

标签: c++c++11c++14c++17

解决方案


使用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';
}

推荐阅读