如何在C ++中使用std :: sort?

时间:2013-03-27 02:57:15

标签: c++ sorting

我在<algorithm>中使用std :: sort函数。我按照http://www.cplusplus.com/reference/algorithm/sort/给出的例子。我想使用看起来像这样的例子:

// using default comparison (operator <):
   std::sort (myvector.begin(), myvector.begin()+4); 

应用于我的课程,它看起来像这样:

std::sort(newTuples->begin(), newTuples->end());

其中newTuples的类型为

std::vector<Tuple>*

所以我覆盖了operator<类的Tuple函数:

bool const Tuple::operator<(Tuple * tup1){
    bool result = false;

    for(int iii=0; iii<tup1->size(); iii++){
        if(tup1->at(iii)->getTokensValue() < this->at(iii)->getTokensValue()){
            result = true;
            break;
        }
        else if (tup1->at(iii)->getTokensValue() > this->at(iii)->getTokensValue())
            break;
    }

    return result;


}

问题在于,当我尝试构建XCode时,它会显示错误:

Xcode error

哪个代码段位于<algorithm>

它给了我一堆排序,其中一行给了我以下内容:

xcode error 2

哪个代码段位于我的Tuple.h文件中。

我不知道还能做什么!非常感谢任何帮助,因为我的CS类项目现在已经晚了3天,因为我无法想出这个最后的排序算法。我已经实现了一个关系数据库管理系统,它具有关系和关系操作select,project和rename。我正确格式化了这些元组,它们只需要按排序顺序排列。谢谢!

编辑:

所以我按照答案中的建议更改了声明,但现在它给了我:

yet another error

任何帮助?

2 个答案:

答案 0 :(得分:3)

TupleTuple*

进行比较
bool const Tuple::operator<(Tuple * tup1)

您应该将其更改为:

bool Tuple::operator<( const Tuple &tup1 ) const

答案 1 :(得分:2)

您需要一位将const Tuple*const Tuple*进行比较的运算符。在Tuple类中声明:

friend bool operator<(const Tuple*, const Tuple*);

并将其作为常规函数实现。


修改

如果你的矢量是std::vector<Tuple>,那么你应该实现:

bool Tuple::operator<(const Tuple&) const;

而不是指针版本。