#include <iostream>
#include <string>
#include<algorithm>
#include<vector>
using namespace std;
// struct comp
// {
// bool operator()( std::string lhs, std::string rhs)
// {
// std::transform(lhs.begin(), lhs.end(),lhs.begin(), ::tolower);
// std::transform(rhs.begin(), rhs.end(),rhs.begin(), ::tolower);
// return lhs < rhs;
// }
// };
bool char_comp(char lhs, char rhs)
{
char lhs_lower = std::tolower(lhs);
char rhs_lower = std::tolower(rhs);
if (lhs_lower == rhs_lower)
return rhs > lhs;
return lhs_lower < rhs_lower;
}
bool string_comp(std::string const & lhs, std::string const & rhs)
{
return std::lexicographical_compare(
lhs.begin(), lhs.end(), rhs.begin(), rhs.end(),
char_comp);
}
int main(){
std::string str;
std::vector<std::string> v{
"This is a test",
"this is a test",
"Cats",
"cats",
"this thing" };
std::sort(v.begin(), v.end() , string_comp);
for(auto &x: v)
std::cout<<x<<std::endl;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTx2ZWN0b3I+CgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIHN0cnVjdCBjb21wCi8vIHsKCgkvLyBib29sIG9wZXJhdG9yKCkoIHN0ZDo6c3RyaW5nIGxocywgc3RkOjpzdHJpbmcgcmhzKQoJLy8gewoJCS8vIHN0ZDo6dHJhbnNmb3JtKGxocy5iZWdpbigpLCBsaHMuZW5kKCksbGhzLmJlZ2luKCksIDo6dG9sb3dlcik7CgkJLy8gc3RkOjp0cmFuc2Zvcm0ocmhzLmJlZ2luKCksIHJocy5lbmQoKSxyaHMuYmVnaW4oKSwgOjp0b2xvd2VyKTsKCQkvLyByZXR1cm4gbGhzIDwgcmhzOwoJLy8gfQovLyB9OwoKYm9vbCBjaGFyX2NvbXAoY2hhciBsaHMsIGNoYXIgcmhzKQp7CiAgICBjaGFyIGxoc19sb3dlciA9IHN0ZDo6dG9sb3dlcihsaHMpOwogICAgY2hhciByaHNfbG93ZXIgPSBzdGQ6OnRvbG93ZXIocmhzKTsKICAgIGlmIChsaHNfbG93ZXIgPT0gcmhzX2xvd2VyKQogICAgICAgIHJldHVybiByaHMgPiBsaHM7CiAgICByZXR1cm4gbGhzX2xvd2VyIDwgcmhzX2xvd2VyOwp9Cgpib29sIHN0cmluZ19jb21wKHN0ZDo6c3RyaW5nIGNvbnN0ICYgbGhzLCBzdGQ6OnN0cmluZyBjb25zdCAmIHJocykKewogICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoCiAgICAgICAgbGhzLmJlZ2luKCksIGxocy5lbmQoKSwgcmhzLmJlZ2luKCksIHJocy5lbmQoKSwKICAgICAgICBjaGFyX2NvbXApOwp9CgoKaW50IG1haW4oKXsKCgpzdGQ6OnN0cmluZyBzdHI7CnN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2ewoiVGhpcyBpcyBhIHRlc3QiLAoidGhpcyBpcyBhIHRlc3QiLAoiQ2F0cyIsCiJjYXRzIiwKInRoaXMgdGhpbmciIH07CgoKc3RkOjpzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSAsIHN0cmluZ19jb21wKTsKCmZvcihhdXRvICZ4OiB2KQpzdGQ6OmNvdXQ8PHg8PHN0ZDo6ZW5kbDsKfQo=