我在<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时,它会显示错误:
哪个代码段位于<algorithm>
。
它给了我一堆排序,其中一行给了我以下内容:
哪个代码段位于我的Tuple.h
文件中。
我不知道还能做什么!非常感谢任何帮助,因为我的CS类项目现在已经晚了3天,因为我无法想出这个最后的排序算法。我已经实现了一个关系数据库管理系统,它具有关系和关系操作select,project和rename。我正确格式化了这些元组,它们只需要按排序顺序排列。谢谢!
编辑:
所以我按照答案中的建议更改了声明,但现在它给了我:
任何帮助?
答案 0 :(得分:3)
将Tuple
与Tuple*
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;
而不是指针版本。