#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <locale>
#include <iostream>
#include <fstream>
#include <iterator>
#include <sstream>
/*
В файле хранятся названия блюд. Каждая строка отдельное название.
Написать программу, которая читает строки из файла в массив строк, и выводит на экран названия блюд, отсортировав их:
а) по убыванию их длины, б) в алфавитном порядке, в) в порядке, обратном алфавитному.
*/
template <typename T>
struct length : public std::binary_function<T, T, bool>
{
bool operator()(const T& s1, const T& s2) const
{
return s2.size() < s1.size();
}
};
template <template <typename> class _Comparer>
void print(std::vector<std::string> v)
{
std::sort(v.begin(), v.end(), _Comparer<std::string>());
typedef std::ostream_iterator<std::string> O;
std::copy(v.begin(), v.end(), O(std::cout, "\n"));
std::cout << std::endl;
}
int main()
{
setlocale(LC_ALL, "");
std::ifstream ifs("dishes.txt");
std::vector<std::string> v;
std::string s;
while (std::getline(ifs, s))
v.push_back(s);
print<length>(v);
print<std::less>(v);
print<std::greater>(v);
return 0;
}