我有一个std :: vector的对象,每个对象都有一个与之关联的数字组标识符.该对象还具有诸如"size"和"name"之类的属性.
我需要能够按名称,大小和其他属性对对象的矢量进行排序,同时保持它们组合在一起(例如,通过上面提到的组标识符).
如何实现这一目标?
使用STL,可以直接插入自己的比较函数.您想要定义一个比较函数,首先比较组,然后比较其他属性.
static bool CompareWidget(const Widget& w1, const Widget& w2)
{
if(w1.GetGroupNumber() != w2.GetGroupNumber())
return (w1.GetGroupNumber() < w2.GetGroupNumber());
if(w1.GetHeight() != w2.GetHeight())
return (w1.GetHeight() < w2.GetHeight();
/// etc
return false;
}
static void SortWidgetVector(WidgetVector& widgetVector)
{
std::sort(widgetVector.begin(), widgetVector.end(), CompareWidget);
}
Run Code Online (Sandbox Code Playgroud)
首先,让我们重新解释一下这个问题.你真正想要的是按组ID排序对象,然后按(名称,大小,......)排序.如果您首先按组ID对它们进行排序,那么显然,具有相同组ID的对象将粘在一起.
显然可以使用自定义谓词轻松完成std::sort.这些方面的东西:
struct MyPredicate {
bool operator() (const MyClass& lhs, const MyClass& rhs) const {
if (lhs.groupID != rhs.groupID) {
return lhs.groupId < rhs.groupId;
} else if (lhs.name != rhs.name) {
return lhs.name < rhs.name;
else
return lhs.size < rhs.size.
}
}
};
std::sort(myObjects.begin(), myObjects.end(), MyPredicate());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5242 次 |
| 最近记录: |