#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <iterator>
#include <functional>
#include <cctype>
template<typename Func>
struct compare
{
bool operator()(const std::string& lhs, const std::string& rhs)
{
std::string lhs_temp(lhs), rhs_temp(rhs);
std::transform(lhs_temp.begin(), lhs_temp.end(), lhs_temp.begin(), tolower);
std::transform(rhs_temp.begin(), rhs_temp.end(), rhs_temp.begin(), tolower);
return Func()(lhs_temp, rhs_temp);
}
};
int main()
{
setlocale (0, "Russian");
std::vector<std::string> vs = {"Qwerty", "QWERTY", "Медвед","Прэвэд","Медвед","Медвед","Стакан", "ПрЭвЭд",
"Пока","Хой","Медвед","Водка","Хой","Хой","Водка","Стакан", "МЕДВЕД"};
std::cout<<"Все слова:\n";
std::copy(vs.begin(), vs.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
std::cout<<"\nУникальные слова (без учета регистра):\n";
std::sort(vs.begin(), vs.end(), compare<std::less<std::string> >());
std::unique_copy(vs.begin(), vs.end(), std::ostream_iterator<std::string>(std::cout, "\n"), compare<std::equal_to<std::string> >());
std::cout<<"\n";
// system("pause");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8Y2N0eXBlPgogCnRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CnN0cnVjdCBjb21wYXJlCnsKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyYgbGhzLCBjb25zdCBzdGQ6OnN0cmluZyYgcmhzKQogICAgewogICAgICAgIHN0ZDo6c3RyaW5nIGxoc190ZW1wKGxocyksIHJoc190ZW1wKHJocyk7CiAgICAgICAgc3RkOjp0cmFuc2Zvcm0obGhzX3RlbXAuYmVnaW4oKSwgbGhzX3RlbXAuZW5kKCksIGxoc190ZW1wLmJlZ2luKCksIHRvbG93ZXIpOwogICAgICAgIHN0ZDo6dHJhbnNmb3JtKHJoc190ZW1wLmJlZ2luKCksIHJoc190ZW1wLmVuZCgpLCByaHNfdGVtcC5iZWdpbigpLCB0b2xvd2VyKTsKICAgICAgICByZXR1cm4gRnVuYygpKGxoc190ZW1wLCByaHNfdGVtcCk7CiAgICB9Cn07CiAKaW50IG1haW4oKQp7CiAgICBzZXRsb2NhbGUgKDAsICJSdXNzaWFuIik7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdnMgPSB7IlF3ZXJ0eSIsICJRV0VSVFkiLCAi0JzQtdC00LLQtdC0Iiwi0J/RgNGN0LLRjdC0Iiwi0JzQtdC00LLQtdC0Iiwi0JzQtdC00LLQtdC0Iiwi0KHRgtCw0LrQsNC9IiwgItCf0YDQrdCy0K3QtCIsCiAgICAgICAgItCf0L7QutCwIiwi0KXQvtC5Iiwi0JzQtdC00LLQtdC0Iiwi0JLQvtC00LrQsCIsItCl0L7QuSIsItCl0L7QuSIsItCS0L7QtNC60LAiLCLQodGC0LDQutCw0L0iLCAi0JzQldCU0JLQldCUIn07CiAKICAgIAogICAgc3RkOjpjb3V0PDwi0JLRgdC1INGB0LvQvtCy0LA6XG4iOwogICAgc3RkOjpjb3B5KHZzLmJlZ2luKCksIHZzLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIlxuIikpOwogCiAgICBzdGQ6OmNvdXQ8PCJcbtCj0L3QuNC60LDQu9GM0L3Ri9C1INGB0LvQvtCy0LAgKNCx0LXQtyDRg9GH0LXRgtCwINGA0LXQs9C40YHRgtGA0LApOlxuIjsKICAgIHN0ZDo6c29ydCh2cy5iZWdpbigpLCB2cy5lbmQoKSwgY29tcGFyZTxzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4oKSk7CiAgICBzdGQ6OnVuaXF1ZV9jb3B5KHZzLmJlZ2luKCksIHZzLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIlxuIiksIGNvbXBhcmU8c3RkOjplcXVhbF90bzxzdGQ6OnN0cmluZz4gPigpKTsKIAogICAgc3RkOjpjb3V0PDwiXG4iOwogICAvLyBzeXN0ZW0oInBhdXNlIik7CiAgICByZXR1cm4gMDsKfQ==