问题是关于std::vector<myclass>使用sortSTL算法类中的函数进行排序.
标准方式是:sort(v.begin(), v.end(), &myfunct)
在哪里myfunct:
bool myfunct( myclass first, myclass second ) {
if (first.value < second.value)
return true;
else return false;
}
Run Code Online (Sandbox Code Playgroud)
上面的方法需要不止一行.我很好奇如何在一行中做到这一点.是否有可能定义比较排序函数中的myclass对象的函数?可能会以某种方式使用它(a < b) ? a : b.我记得在C#中有这样的东西,但是我忘了怎么称呼它.是否可以用C++做.
首先,你可以返回,first.value < second.value但这并没有摆脱这个功能.在C++ 2011中,您可以使用lambda函数:
std::sort(begin, end, [](myclass const& f, myclass const& s){ return f.value < s.value; });
Run Code Online (Sandbox Code Playgroud)
如果没有C++ 2011,我认为你需要一个函数对象,因为没有任何东西可以将你的类投射到你想要比较的值.
顺便说一句,你肯定想通过引用比较函数来传递除了最简单的对象之外的所有东西.
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |