仅使用STL循环打印映射值

时间:2016-03-28 16:12:25

标签: c++ stl

我有一个问题,我无法看到该怎么做。我必须只用STL循环打印地图值,我不能在循环等时使用循环。

这是我的地图std::map<std::string, Borrowed*> map;

我宁愿不自己宣布另一个功能,除非它真的有必要这样做

编辑:我尝试过使用for_each和copy功能,但如果你应该使用它我不知道你将如何使用它们

2 个答案:

答案 0 :(得分:2)

只需将std::for_each与打印元素的lambda一起使用(使用map<string, int>进行简单使用,使用您自己的代码打印Borrowed*元素。)

#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>

int main()
{
    std::map<std::string, int> m = { { "bla", 1 }, { "yada", 2 } };
    std::for_each(m.begin(), m.end(), [](auto const& elem) {
        std::cout << "{ " << elem.first << ", " << elem.second << "}, ";
    });
}

Live Example

注意这使用C ++ 14广义lambdas(用auto来推导出参数类型)。在C ++ 11中,您必须明确地将其写出来,而在C ++ 98中,您必须将自己的函数对象编写到lambda的工作中。

答案 1 :(得分:0)

假设您的意思是STL算法:

这是std::for_each示例(c ++ 11):

#include <algorithm>
#include <iostream>

std::for_each(map.cbegin(), map.cend(), 
  [&](const std::pair<std::string, Borrowed*> &pair) {
    std::cout << pair.first // std::string (key)
      << " " << pair.second->XXX // Borrowed* (value) or whatever you want to print here
      << "\n";
}); 

http://en.cppreference.com/w/cpp/algorithm/for_each