2016-11-03 3 views
-1

から位置を特定するのではなく、値で要素を削除すると、各四角形には可能な値のセットと行番号と列番号が与えられます。スコークのゲームボード用の実装の一部として、平方ベクトル

これは可能な値の集合を持つ方形ベクトルによって行いました。ここでは、ある値が可能な値の集合から削除され、同じx値とy値、またはループのための二重の

vector< vector< std::set <int> > > gameboard; 

..:同じsubsquare)

私がいる問題は、私はセットから特定の値を削除する方法がわからないですが、私はそれがこのように設定していましたグリッドを循環させるためにここに...

int removeValue = *gameboard[x][y].begin(); 


gameboard[x][y].erase(removeValue); 

しかし、私はベクトルのどの位置で値を取り除いているのかは確かですが、これは私が望むものではありません。何か案は?

+0

うん。あなたはもう正方形を持っていません。あなたが設定してテストできるセンチネルとして、不可能な値を使うことをお勧めします。 – user4581301

+0

私はあなたがセットを反復しようとは決して知りませんでしたが、反復子を逆転させているので、セットのbegin()== end()ならUBを得ることができます。 –

答えて

1

セットから値を削除するための構文がよく見えます。しかし、私はあなたが正しい価値を持っているとは思わない。

int removeValue = *gameboard[3][3].begin(); 

std::set<int> &rSquare = gameboard[3][3];  // get the set 
std::set<int>::iterator iter = rSquare.begin(); // get an iterator 
int first_possibility = *iter;     // retrieve first possibility in set 

セットから特定の値を削除する場合、削除する値はすでにわかっています。あなたはそれをする必要があります、あなたが与えた2行目とまったく同じです。

gameboard[x][y].erase(removeValue); 

はここで、9x9のグリッドを作成し、すべての可能性を初期化して、特定の可能性を除去する完全な作業のデモです:

#include <iostream> 
#include <vector> 
#include <set> 

std::set<int> initialize_square(){ 
    std::set<int> all; 
    for (int value = 1; value <= 9; ++value) 
     all.insert(value); 
    return all; 
} 

int main() 
{ 
    std::vector< std::vector< std::set <int> > > gameboard; 
    gameboard.resize(9); 
    for (int x = 0; x < 9; ++x){ 
     gameboard[x].resize(9); 
     for (int y = 0; y < 9; ++y){ 
      gameboard[x][y] = initialize_square(); 
     } 
    } 

    std::set<int> &possibilities = gameboard[3][3]; 

    std::cout << "possibilities before removing '5' are: "; 
    for (int n : possibilities) 
     std::cout << n << ", "; 
    std::cout << std::endl; 

    // remove 5 from a specific cell 
    // I would use possibilities.erase but this proves your syntax was good 
    int value_to_remove = 5; 
    gameboard[3][3].erase(value_to_remove); 

    std::cout << "possibilities after removing '5' are: "; 
    for (int n : possibilities) 
     std::cout << n << ", "; 
    std::cout << std::endl; 
} 
関連する問題