#include <algorithm>
#include <string>
#include <vector>
#include <cctype>
#include <iostream>
typedef std::vector<std::string> StringVect;
std::string sequence = "QWERTYUIOPASDFGHJKLZXCVBNM";
std::vector<int> lookup(26);
bool getless(const std::string& s1, const std::string& s2)
{
for (size_t i = 0; i < std::min(s1.size(), s2.size()); ++i)
if (s1[i] != s2[i])
return (lookup[toupper(s1[i])-'A'] < lookup[toupper(s2[i])-'A']);
return s1.size() < s2.size();
};
int main()
{
StringVect sv = {{ "apple" },{ "pear" },{ "peach" }};
// build the lookup table
int i = 0;
std::for_each(sequence.begin(), sequence.end(), [&](char ch) {lookup[ch-'A'] = i; ++i; });
// sort the data
std::sort(sv.begin(), sv.end(), getless);
// output results
for (auto& s : sv)
std::cout << s << "\n";
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gU3RyaW5nVmVjdDsKc3RkOjpzdHJpbmcgc2VxdWVuY2UgPSAiUVdFUlRZVUlPUEFTREZHSEpLTFpYQ1ZCTk0iOwpzdGQ6OnZlY3RvcjxpbnQ+IGxvb2t1cCgyNik7Cgpib29sIGdldGxlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHMxLCBjb25zdCBzdGQ6OnN0cmluZyYgczIpCnsKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RkOjptaW4oczEuc2l6ZSgpLCBzMi5zaXplKCkpOyArK2kpCiAgICAgICAgaWYgKHMxW2ldICE9IHMyW2ldKQogICAgICAgICAgICByZXR1cm4gKGxvb2t1cFt0b3VwcGVyKHMxW2ldKS0nQSddIDwgbG9va3VwW3RvdXBwZXIoczJbaV0pLSdBJ10pOwogICAgcmV0dXJuIHMxLnNpemUoKSA8IHMyLnNpemUoKTsKfTsKCmludCBtYWluKCkKewogICAgU3RyaW5nVmVjdCBzdiA9IHt7ICJhcHBsZSIgfSx7ICJwZWFyIiB9LHsgInBlYWNoIiB9fTsKCiAgICAvLyBidWlsZCB0aGUgbG9va3VwIHRhYmxlCiAgICBpbnQgaSA9IDA7CiAgICBzdGQ6OmZvcl9lYWNoKHNlcXVlbmNlLmJlZ2luKCksIHNlcXVlbmNlLmVuZCgpLCBbJl0oY2hhciBjaCkge2xvb2t1cFtjaC0nQSddID0gaTsgKytpOyB9KTsKCiAgICAvLyBzb3J0IHRoZSBkYXRhCiAgICBzdGQ6OnNvcnQoc3YuYmVnaW4oKSwgc3YuZW5kKCksIGdldGxlc3MpOwoKICAgIC8vIG91dHB1dCByZXN1bHRzCiAgICBmb3IgKGF1dG8mIHMgOiBzdikKICAgICAgc3RkOjpjb3V0IDw8IHMgPDwgIlxuIjsKfQ==