我对std :: sort算法有疑问。这是我的测试代码:
struct MyTest
{
int m_first;
int m_second;
MyTest(int first = 0, int second = 0) : m_first(first), m_second(second)
{
}
};
int main(int argc,char *argv[])
{
std::vector<MyTest> myVec;
for(int i = 0; i < 10; ++i)
{
myVec.push_back(MyTest(i, i + 1));
}
//Sort the vector in descending order on m_first without using stand alone function or functors
return 0;
}
是否可以在不使用任何独立函数或仿函数的情况下对变量m_first
上的向量进行排序?另外,请注意我没有使用提升。
答案 0 :(得分:10)
是的,只要要排序的范围中的值类型具有定义“严格弱排序”的operator <
,也就是说,它可用于比较两个MyTest
实例正确。您可以执行以下操作:
class MyTest
{
...
bool operator <(const MyTest &rhs) const
{
return m_first<rhs.m_first;
}
};
答案 1 :(得分:3)
写一个运算符&lt;为你的结构。这是sort使用的默认函数,也是允许它在自定义数据结构上运行的最简单方法。
答案 2 :(得分:2)
定义运算符&lt;
struct MyTest
{
...
bool operator<(const MyTest& a_test) const {
return m_first < a_test.m_first;
}
};
答案 3 :(得分:2)
可以使用成员函数来完成它,但是独立功能是可行的方法。
bool operator <(const MyTest &lhs, const MyTest &rhs)
{
return lhs.m_first<rhs.m_first;
}
为什么......
Scott Meyers:非会员职能如何改善封装
如果您正在编写可以执行的功能 实施为成员或 作为非朋友的非会员,你应该 更愿意将其作为非成员实施 功能。那个决定增加了 类封装。你想的时候 封装,你应该想 非会员职能。
答案 4 :(得分:1)
您应该在operator<
中定义MyTest
,它应该如下所示:
bool operator<(const MyTest &other) const {
return m_first < other.m_first;
};
答案 5 :(得分:-2)