我上课了。定义如下:
using namespace std;
class Token
{
private:
string token;
vector<string> field;
public:
void setToken(string s);
string getToken();
void setField(string temp);
string getField(int i);
int getsize();
};
我现在有了这些对象的向量。 (vector<Token> myobjs
)
我想根据其中的string token
(私有变量)对此向量进行排序。
我正在使用自己的比较函数来对该向量进行排序
bool compare(const vector<Token>&a, const vector<Token>&b)
{
if(a.getToken() < b.getToken())
return true;
return false;
}
vector<Token> delim;
这不是拨打sort(delim.begin(), delim.end(), compare)
的方法吗?
答案 0 :(得分:2)
您需要比较单个对象,而不是向量:
bool compare(const Token & a, const Token & b) {
return a.getToken() < b.getToken();
}
这需要getToken
为const
string getToken() const;
答案 1 :(得分:1)
您无需比较token
的向量,您需要比较token
:
bool compare(const Token&a, const Token&b)
{
return a.getToken() < b.getToken();
}
当然其他答案已经说过,getToken
需要标记为const
:
string getToken() const;
答案 2 :(得分:1)
正如Borgleader所提到的,你可以稍微简化你的谓词,即使这不是问题。您实际上需要比较Token
s。
bool compare(const Token& a, const Token& b)
{
return a.getToken() < b.getToken();
}
您遇到的问题是谓词的a
和b
参数是常量,因此您无法调用可能会使其变异的函数成员。
要解决这个问题,你必须将你的类的getter标记为常量:
class Token
{
private:
string token;
vector<string> field;
public:
void setToken(string s);
string getToken() const; // edited
void setField(string temp);
string getField(int i) const; // edited too
int getsize() const; // edited too
};
顺便说一句,你也可以使用lambda代替创建一个函数。在C ++ 14中,您可以编写:
sort(delim.begin(), delim.end(),
[](auto const& a, auto const& b) { return a.getToken() < b.getToken(); }
);