8

0、1、2、3、4 などの一連の数値を作成したいのですが、次のコードはコンパイルに失敗します。

std::set<int> s;
std::iota(s.begin(), s.end(), 0);

次のエラー メッセージが表示されます。

error C3892: '_First' : you cannot assign to a variable that is const

コンパイラは VC++2012 です。ベクトルに対しても同じコードが正常に機能します。セットでの使い方は?

アップデート

セットサイズが指定されていないため、コードが無意味であることがわかりました。

ここに私の問題の詳細があります。

[0, N] 範囲のいくつかの数値を含むセットがあります。私のアプリケーションでは、そのようなセットのセット差を何度も計算する必要があります。N は固定です。

としましょう。N = 5最初のセットはs1 = {0, 3, 4}です。set difference を計算する必要があります{0, 1, 2, 3, 4} \ {0, 3, 4} == {1, 2}。この操作は、さまざまなセットに対して頻繁に実行する必要があるため、すべての数値 ({0, 1, 2, 3, 4}この場合) を使用してセットを作成し、std::set_differenceそれらの差を計算するために使用できると考えました。

4

3 に答える 3

1

セットは、ベクトルがインデックスからそのインデックスに格納された値への関連付けを持っているという点でベクトルとは異なりますが、セットは値がセット内にあるかどうかの情報のみを持っています。したがって、セット要素に値を割り当てることは無意味です。それを強制する方法は、セット内の要素が一定であることです。

それを行う同等の方法は、セットに含めたくない値 (ベクトルの場合は「古い」値) を削除してから、格納したい値を反復処理するようなものです (itoa を使用すると、増加する値のシーケンス)、それらを 1 つずつセットに追加します。

于 2013-10-22T22:28:15.417 に答える