如何打印属于地图的一系列元素(std::p air<size_t,std::string>)(不是所有元素)
How to print a range of elements (std::pair<size_t, std::string>) belonging to a map (not all elements)
如何打印属于 std::map<size_t, std::string>?
的一系列元素(键和值(我不需要打印所有元素。
使用C 11,C 14或C 17的每个建议,都不是boost库。
#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';
}
我不明白……为什么不直接比较?
void print_range(map<size_t, string> & m, size_t first, size_t last)
{
for(auto & kvp : m)
{
if (kvp.first >= first && kvp.first <= last)
cout << setw(6) << kvp.first << ":" << kvp.second << endl;
}
}
我尝试了...毫无问题。
std::for_each
非常适合:
void print_range(map<size_t, string> & m, size_t first, size_t last)
{
auto from = m.lower_bound (first);
auto to = m.upper_bound (last);
std::for_each (from, to, [] (const auto &e)
{ std::cout << e.first << ' ' << e.second << 'n'; });
}
实时演示
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何从存储在std::映射中的std::集中删除元素
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- std::矢量保存 只推送最后一个元素
- std::map:当元素不可默认构造时创建/替换元素
- 如何读/写或遍历 std::array 中的特定元素范围?
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 为什么 std::p air 的大小与其元素的大小之和不同?
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 使用 std::min_element、std::max_element 查找矢量中的最小和最大元素
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- call call cons构件功能的std ::元素的每个元素