string 排序

场景:字母string排序. vector 和 sort 相关.

字母string排序. vector 和 sort 相关.请指教.
由于我要比较的string中只保存 A~Z 字母 或者 为空.所以,排序比较时,我比较 string中的每个元素的 unicode 码. unicode 小的排在前面.

typedef struct SData {
  QString fpy; // 一个以 unicode 编码保存数据的 string
  int id;
  //....other
};

std::vector<SData> vS;

struct cmpfpy {
  bool operator()(const SData &a, const SData &b) {
  // string 是空
  if (a.fpy.isEmpty()) return true; // 当 b.fpy 同时是空时,由于他们都是空,所以 a 排在前面.
  if (b.fpy.isEmpty()) return false;

  // 得到长度
  int alen = a.fpy.length();
  int blen = b.fpy.length();
  int len = (alen <= blen) ? alen : blen ;

  for (int i = 0; i < len ; i++) {
  // a.fpy.at(i).unicode() 表示取得第 i 个元素的unicode码

  // 相同 skip
  if (a.fpy.at(i).unicode() == b.fpy.at(i).unicode()) continue;
  // a.fpy 中的元素比 b.fpy 中的元素小
  if (a.fpy.at(i).unicode() < b.fpy.at(i).unicode()) return true;
  // a.fpy 中的元素比 b.fpy 中的元素大
  if (a.fpy.at(i).unicode() > b.fpy.at(i).unicode()) return false;
  }

  // 元素全部相同.
  // 当长度相同时,a 放到前面.
  // 当长度不相同,如果 a.fpy 比较短,a放前面. 如果 b.fpy 比较短,b放前面.
  //
  return (len == alen) ? true: false;
  }
};

排序的使用:
// vS 载入一些数据.
sort(vS.begin(), vS.end(), cmpfpy());

排序有时候会死掉,代码执行到 sort(.....); 进入出不来了....请大家帮看看比较函数是不是写的有问题?

ps:数据量才300条左右...当我删除了几条数据时,排序顺利通过了.然后我又删除了几条数据,排序又死了...应该比较函数有毛病
ps1:听说有默认的字母string排序函数?哪位知道请指点一下!

------解决方案--------------------
QString是个啥东西?如果是对string的封装的话,你可以在比较函数中直接使用string的比较函数
int string::compare(const string& ); 
相等时返回0, 大于时返回>0, 小于时返回<0
------解决方案--------------------
程序没看出什么问题.
编译环境设为UNICODE了吗
------解决方案--------------------
QString是什么东西?

如果QString已经定义了<比较符号,那么直接用好了,不用自己写了

bool operator()(const SData &a, const SData &b) 
{
return a.fpy< b.fpy;
}