最近,我了解了STL类型和模板,在练习STL并习惯使用它的过程中,我们遇到了挑战:
std::map<std::string, size_t>
限制:
只能使用:std::vector
,std::map
,std::string
,std::algorithm
,std::functional
无法定义复杂类型或模板
无法使用. (member access), -> (member access via pointer), * (dereference) operators
不能使用for, while, do-while nor if-else, switch
和其他条件
可以使用std::for_each
和功能模板的其他功能来迭代元素的集合
无lambdas
否std::cout
,std::cerr
,std::ostream
等
无自动类型
可以使用其他STL模板,只要它们包含在(1)中所述的标头中就可以使用
允许使用这些功能:
void print(const std::string& str)
{
std::cout << str << std::endl;
}
std::string split(const std::pair<std::string, size_t> &r)
{
std::string name;
std::tie(name, std::ignore) = r;
return name;
}
最初,我想使用std::for_each(std::begin(mymap), std::end(mymap), print)
遍历地图,然后使用打印功能打印出内容。然后我意识到我实际上正在使用std::pair<std::string, size_t>
,这使我考虑使用std::bind
和std::tie
分解std::pair
。但是由于我想我需要在std::for_each
表达式中执行此操作,因此如何在同时调用元素上的print的同时拆分std::pair
?
我也考虑过使用Structured Binding
,但不允许我使用auto
。
所以,问题是,我如何利用STL来迭代地图以提取内容,然后使用提供的帮助程序功能将其打印出来?显然,没有限制,挑战本来就很容易,但是鉴于此,我对于STL中的哪种功能合适感到困惑。
最近,我了解了STL类型和模板,在练习STL并习惯使用它的过程中,我们面临挑战:遍历std :: map <:string size_t>Print ...
我在您的函数中使用了“ std :: pair&作为for_each第三个参数。
如果不允许使用lambda,则可以改用仿函数。