language: C++11 (gcc-4.7.2)
date: 700 days 6 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// C++0x: compile with g++ -std=c++0x <filename>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
 
int main() {
  std::vector<std::string> v = {
    "6465", "64"
  };
  std::sort(v.begin(), v.end(),
      [](const std::string &lhs, const std::string &rhs) {
        auto lhsLen = lhs.size();
        auto rhsLen = rhs.size();
        auto longer = (lhsLen > rhsLen) ? lhsLen : rhsLen;
        for (auto i = 0; i < longer; ++i) {
          if (i < lhsLen && i < rhsLen) {
            if (lhs[i] != rhs[i]) return lhs[i] > rhs[i];
          }
          else if (i < lhsLen) { // no more rhs
            if (lhs[i] != rhs[0]) return lhs[i] > rhs[0];
          }
          else {                 // no more lhs
            if (rhs[i] != lhs[0]) return lhs[0] > rhs[i];
          }
        }
        return true;
      });
 
  for (size_t i = 0; i < v.size(); ++i) {
    std::cout << v[i] << ' ';
  }
}