掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CArrayの順番を変えずに大小比較して、順序を代入するには? (ID:73279)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> pair<__int64, INT_PTR> の配列を作って <m_target, index> を記憶し > これをソートして m_number に index 入れるとか。 やってみた。 #include <afxtempl.h> #include <algorithm> #include <vector> #include <cstdlib> #include <iostream> using namespace std; class ClassX { public: INT64 m_target; int m_number; }; struct work { INT64 m_target; int* p_number; work(ClassX& x) : m_target(x.m_target), p_number(&x.m_number) {} }; bool operator<(const work& x, const work& y) { return x.m_target < y.m_target; } int main() { const int N = 20; CArray<ClassX,ClassX&> aryX; // テキトーな値を詰める for ( int i = 0; i < N; ++i ) { ClassX item; item.m_target = rand()%9 + 1; item.m_number = -1; aryX.Add(item); } // bufにコピーして vector<work> buf; for ( int i = 0; i < N; ++i ) { buf.push_back(work(aryX[i])); } // ソート sort(buf.begin(), buf.end()); // 順位をつけて for ( int i = 0; i < N; ++i ) { if ( i == 0 ) { *buf[i].p_number = 0; } else if ( buf[i].m_target == buf[i-1].m_target ) { *buf[i].p_number = *buf[i-1].p_number; } else { *buf[i].p_number = i; } } // プリント for ( int i = 0; i < N; ++i ) { cout << aryX[i].m_target << ':' << aryX[i].m_number << endl; } }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.