C++のカーディナリティk
サブセットをすべて生成したいと考えています。{0, 1, 2, ..., n-1}
Haskell では、次のようにします。
sets 0 n = [[]]
sets k n = [i:s | i <- [0..n-1], s <- sets (k-1) i]
またはPythonで:
def sets(k, n):
if k == 0:
return [()]
return ((i,)+s for i in range(n) for s in sets(k-1, i))
たとえば、(わかりやすくするために改行が追加されています)
ghci> sets 2 8
[[1,0],
[2,0],[2,1],
[3,0],[3,1],[3,2],
[4,0],[4,1],[4,2],[4,3],
[5,0],[5,1],[5,2],[5,3],[5,4],
[6,0],[6,1],[6,2],[6,3],[6,4],[6,5],
[7,0],[7,1],[7,2],[7,3],[7,4],[7,5],[7,6]]
これを行う「C++の方法」は何でしょうか? 問題の解決方法を尋ねているわけではないことに注意してください。C++ プログラマーが「通常」と見なすデータ型について質問しています。
(参考までに、私は C++ にはある程度精通しており、C にはある程度精通しています。)