- ベストアンサー
複数のオブジェクトと生成とその組み合わせ
- 外部からの入力で複数のオブジェクトを生成し、それらの可能な組み合わせをつくる方法についての質問です。
- オブジェクトの生成と組み合わせを管理するためのアルゴリズムが思いつかずに困っています。
- 解決策があれば教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ん~, なんかよくわからん.... 「オブジェクトが複数種類作られることを想定して」の「オブジェクト」というのは「Apple」とか「Banana」とか言ってるやつのこと? でも「オブジェクトの種類 = クラス」としては 1つだしなぁ.... 効率を無視すれば vector<vector<mochimono> > enumerate(const vector<mochimono> &items) { vector<vector<mochimono> > ret; for (auto item: items) { vector<vector<mochimono> > current = ret; ret.clear(); for (auto &bucket: current) { ret.push_back(bucket); for (int i = 0; i < item.maximum_numbers; ++i) { bucket.push_back(item); ret.push_back(bucket); } } } return ret; } のような感じ (要 C++0x) でいけると思うんだが.
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
こんなん↓でいいかしら #include <iostream> #include <array> #include <algorithm> #include <string> using namespace std; template<typename T, int N> bool generate_next(array<T,N>& ar, const array<T,N>& lm) { for ( int digit = 0; digit < N; ++digit ) { if ( ++ar[digit] == lm[digit] ) { ar[digit] = 0; } else { break; } } return any_of(ar.begin(), ar.end(), [](int n) { return n != 0; }); } int main() { const int N = 3; array<string,N> fruits = { "apple", "banana", "cherry" }; array<int,N> limits = { 3, 2, 2 }; array<int,N> counts = { 0, 0, 0 }; do { for ( int i = 0; i < N; ++i ) { cout << fruits[i] << ":" << counts[i] << ' '; } cout << endl; } while ( generate_next(counts, limits) ); } --- 実行結果 --- apple:0 banana:0 cherry:0 apple:1 banana:0 cherry:0 apple:2 banana:0 cherry:0 apple:0 banana:1 cherry:0 apple:1 banana:1 cherry:0 apple:2 banana:1 cherry:0 apple:0 banana:0 cherry:1 apple:1 banana:0 cherry:1 apple:2 banana:0 cherry:1 apple:0 banana:1 cherry:1 apple:1 banana:1 cherry:1 apple:2 banana:1 cherry:1
お礼
詳しいコードありがとうございます。まさにこんな感じの使い方をしたかったのです。考えていたよりずっと短いコードで実現されていておどろきました。
お礼
具体的なコードありがとうございました。
補足
わかりにくくて申し訳ないです。 >「オブジェクトが複数種類作られることを想定して」の >「オブジェクト」というのは「Apple」とか「Banana」とか >言ってるやつのこと? でも「オブジェクトの種類 = クラス」 >としては 1つだしなぁ.... 「オブジェクト」とはApple, Banana等のことです。ですので「オブジェクトの種類が複数」というのは正しくなかったですね。。。 クラスはmochimonoという1種類でそれをつかってApple.Banana,さらにPeachなどオブジェクトが複数つくられる、ということを意図しました。