うひゃその都度length()メンバ関数呼び出してたら遅くなるよ
多分std::pair<std::string, size_t>に一度作り直してsize_tにlength入れておいてソートして
ソートが済んだらまたstd::string配列に作り直す方が速いと思う
あ、これ実際にやってみようかな
どの程度の大きさの配列だと時間が逆転するか

length()の実装にもよるけどね
stringに変更があった時にlengthがprivate変数でそこをその都度書き換えるような実装なら
そのままソートした方が速くなるし