0

我正在尝试排序

std::vector< std::vector< std::string> > perm;

我正在尝试std::sort从算法标题中使用

我打电话给它

std::sort( perm.begin(), perm.end(), sortPerms);

这是我的排序功能:

bool sortPerms (const std::vector<std::string> &i, const std::vector<std::string> &j) {
  for(unsigned int x = 0; x < i.size(); x++) {
    if(i[x] != j[x])
      return false;
  }
  //both are equal
  return true;
}

排序的目的是然后调用 std::unique 以获得具有唯一值的向量。当我在 cygwin 中使用 gcc 进行编译时,我没有收到任何错误,但我有重复,当我使用 Visual Studio 2010 进行编译时,我收到一个错误,即 operator< 未定义。我一步一步地尝试使用它自己的排序功能,而不是我定义的那个。

我不确定如何解决这个问题,有什么建议吗?

其他细节:保证所有向量的大小相同。它的目的是字符串原始向量的每个排列的向量。每个字符串都是一个命令,我正在寻找可以改变这些命令的所有不同方式。所以我需要去除重复项。

4

1 回答 1

3

您的排序函数应该返回 when a < b,而不是a != b

此外,默认情况下,std::vector<>应该已经支持通过 进行字典比较operator<,这应该符合您的预期(依次比较每个元素,与用于比较的第一个非等效元素)。请参阅http://en.cppreference.com/w/cpp/container/vector/operator_cmp

您当前的 sortPerms 函数看起来像您将传递给的函数std::unique,但它的行为与用于 的谓词不同std::sort

于 2012-10-25T00:32:12.767 回答