私はMFCとC++のアプリケーションにはかなり新しいので、私の質問があまりにも些細な場合はお詫び申し上げます。とにかに私の上司にはVC++で書かれたレガシーコードがあり、ソートする必要のあるCObListに格納されているオブジェクトのリストがあります。私はそのオブジェクトに格納されている整数値に基づいてこのリストをソートする必要があります。これを行う簡単な方法はありますか?CObListを簡単にソートする方法はありますか?
1
A
答えて
0
これはすでに分かっているはずです.C++を初めてお使いの方は、MFCコレクションクラス(CObList
、CArray
など)を使用しないでください。代わりに、STL(std::vector
,std::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...
関連する問題
- 1. ファイルディスクリプタを簡単にフォークする方法はありますか?
- 2. QProgressBarを簡単にカスタマイズする方法はありますか?
- 3. WebSphereに簡単にデプロイする方法はありますか?
- 4. Readlineに代わる簡単な方法はありますか?
- 5. pandas.Seriesを単調にする簡単な方法はありますか?
- 6. フレックスプリローダーを隠す簡単な方法はありますか?
- 7. "elseif marathon"より簡単な方法はありますか?
- 8. C#のキーに基づいてNameValueCollectionをソートする簡単な方法はありますか?
- 9. NSArrayを後方に反復する簡単な方法はありますか?
- 10. これを行う簡単な方法はありますか?
- 11. BJ concurencyを扱う簡単な方法はありますか?
- 12. std :: vector <double>を簡単に/簡単に*プロットする方法はありますか?
- 13. Kerasでclass_weightを簡単に割り当てる方法はありますか?
- 14. 複数のコミットを簡単にスムーズにする方法はありますか?
- 15. RubyコードをPHPに簡単に変換する方法はありますか?
- 16. 簡単な方法はありますか?
- 17. API作成の簡単な方法はありますか?
- 18. Markdownを簡単なHTML文書に変換する簡単な方法はありますか?
- 19. C#からWebカメラにアクセスする簡単な方法はありますか?
- 20. Openshift自動スケーリングを簡単にテストする方法はありますか?
- 21. System.Data.DataTableをlinqエンティティに変換する簡単な方法はありますか?
- 22. Djangoでjsonデータを簡単にエンコードする方法はありますか?
- 23. gradle Execタスクでstderrを簡単にフィルタリングする方法はありますか?
- 24. サンプルFHIRリソースを簡単に生成する方法はありますか?
- 25. ScrollViewerを「バウンシー」にする簡単な方法はありますか?
- 26. Eclipseでモデル/ UMLを簡単に作成する方法はありますか?
- 27. Google Financeデータを簡単に取得する方法はありますか?
- 28. フレックス4:スパークボタンを簡単に拡張する方法はありますか?
- 29. ドットネットのWindowsフォームを簡単に印刷する方法はありますか?
- 30. jqueryコードをjavascriptに変換する簡単な方法はありますか?
代替は 'CObList'上で動作イテレータを定義することです。しかし、C++を初めてお使いになる人にとっては、おそらくちょっとした冒険かもしれません。 – jalf
'std :: sort'はランダムアクセスイテレータを必要とします。通常はリンクリストにはありません。 'std :: list'はその問題を回避する組み込みの' sort'演算を持っています。 – Nate