Can the display function be re-written to avoid duplication of the std::for_each
loop?
#include <iostream>
#include <set>
#include <algorithm>
struct Widget
{
int id;
Widget(int i) : id(i){}
};
namespace std
{
template<>
struct less<Widget *> {
public:
bool operator ()(Widget *const& a, Widget *const& b) const {
return (a->id < b->id);
}
};
}
void display(const std::set<Widget *>& wList, bool order)
{
if (order) {
std::for_each(wList.begin(), wList.end(), [](const Widget* x) {
std::cout << x->id << std::endl;
});
}
else {
std::for_each(wList.rbegin(), wList.rend(), [](const Widget* x) {
std::cout << x->id << std::endl;
});
}
}
int main()
{
std::set<Widget *> s;
s.insert(new Widget(1));
s.insert(new Widget(2));
s.insert(new Widget(5));
s.insert(new Widget(3));
s.insert(new Widget(9));
s.insert(new Widget(7));
display(s, false);
}