我有一个方法可以根据条件向前或向后迭代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>
?
答案 0 :(得分: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);