有没有一种简单的方法来排序CObList?

时间:2010-12-07 23:42:26

标签: c++ visual-c++ sorting mfc

我对MFC和C ++应用程序很陌生,所以如果我的问题太微不足道,我会道歉。无论如何,我的老板有一些用VC ++编写的遗留代码,并且有一个存储在CObList中的对象列表,我需要对其进行排序。我需要根据存储在该对象中的某个整数值对此列表进行排序。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

您可能已经知道这一点:如果您不熟悉C ++,请不要使用MFC集合类(CObListCArray等)。相反,请使用STL(std::vectorstd::list等)。 Visual C ++的产品经理说了很多here(寻找RonaldLaeremans的帖子)。

但有时你有遗留代码,你必须使用MFC集合。


确实需要对列表进行排序,还是您可以使用列表的排序副本?如果是后者,将列表复制到std::vector并对其进行排序将非常容易。当然,您只能复制指针或引用,因此不会产生创建列表中存储的对象的其他副本的开销。

这样的事情:

std::vector<const CObject*> v;
for (POSITION pos = theList.GetHeadPosition(); pos != NULL;) {
    v.push_back(theList.GetNext(pos));
}

// Use your own comparison function. Here I used a lambda (available
// in Visual C++ 2010), but you could pass any function that returns
// true iff the first item is less than the second item.
auto comparisonFunction = [](const CObject* left, const CObject* right)->bool {
    return (left->m_yourStoredValue < right->m_yourStoredValue);
};

std::sort(v.begin(), v.end(), comparisonFunction);

// Use the results...