2

我有一个方法应该map根据条件向前或向后迭代。操作本身独立于方向,因此我希望能够做这样的事情:

std::map<int, int> some_map;
auto iter = some_condition ? some_map.begin() : some_map.rbegin();
for (; iter != some_condition ? some_map.end() : some_map.rend(); ++iter)
{
    //something to do with *iter
}

我知道我应该能够使用模板函数来做到这一点(对吧?),但这似乎有点过头了。

有没有一种方法可以在没有模板的情况下在一个函数中完成?也许使用<algorithm>?

4

1 回答 1

2

这样做的一种方法是首先考虑你想对每个元素做什么,比如

auto f = [](const std::pair<int, int> &p) { std::cout << p.first << std::endl; };

然后你可以在方向上分支:

if(forward)
    std::for_each(std::begin(m), std::end(m), f);
else
    std::for_each(std::rbegin(m), std::rend(m), f);
于 2016-09-09T08:20:53.110 回答