Вы, наверное, уже знаете это: если вы новичок в C ++, пожалуйста, не используйте классы коллекции MFC (CObList
, CArray
и т. Д.).Вместо этого используйте STL (std::vector
, std::list
и т. Д.).Менеджер по продукту для Visual C ++ сказал столько же здесь (ищите сообщение от RonaldLaeremans).
Но иногда у вас есть устаревший код, и вы должны использовать коллекции MFC.1010 *
Вам действительно нужно отсортировать список, или вы можете жить с отсортированной копией списка?Если последнее, было бы довольно легко скопировать список в 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...