Так у меня есть вектор кортежа координат производится с помощью следующего кода:использование станд :: найти найти зЬй :: кортеж в станд :: вектор
vector<tuple<int, int>> coordinates;
for (int i = 0; i < 7; i++){
for (int j = 0; j < 6; j++){
coordinates.push_back(make_tuple(i, j));
}
}
Я пытаюсь заполнить доску с «x», «o» или «.». со следующим:
void displayBoard(vector<tuple<int,int>>& board, vector<tuple<int,int>>& p1, vector<tuple<int,int>>& p2){ // prints out board
cout << " a b c d e f g\n"; // top row
for (int i = 1; i < 43; i++){
if (i % 7 == 0) {
if (find(p1.begin(), p1.end(), board[i])) cout << "| x |\n";
else if (find(p2.begin(), p2.end(), board[i])) cout << "| o |\n";
else cout << "| . |\n";
} else {
if (find(p1.begin(), p1.end(), board[i])) cout << "| x ";
else if (find(p2.begin(), p2.end(), board[i])) cout << "| o ";
else cout << "| . ";
}
}
}
мой INT главный выглядит следующим образом:
int main() {
vector<tuple<int, int>> coordinates;
for (int i = 0; i < 7; i++){
for (int j = 0; j < 6; j++){
coordinates.push_back(make_tuple(i, j));
}
}
vector<tuple<int,int>> p1 = {make_tuple(0,1)};
vector<tuple<int,int>> p2 = {make_tuple(3,1)};
displayBoard(coordinates, p1, p2);
return 0;
}
Я (0,1) и (3,1) в качестве тест-координаты, чтобы увидеть, если код будет работать , Короче говоря, я хотел использовать std :: find, чтобы определить, была ли выбрана координата кортежа с помощью p1 или p2 и соответствующим образом форматировать выводимую строку. Итак, если бы std::find_if(p1.begin(), p1.end(), make_tuple(2,2))
было правдой, чтобы поместить ячейку с «х», например. Проблема я получаю следующее сообщение об ошибке при компиляции:
error: could not convert ‘std::find<__gnu_cxx::__normal_iterator<std::tuple<int, int>*, std::vector<std::tuple<int , int> > >, std::tuple<int, int> >((& p2)->std::vector<_Tp, _Alloc>::begin<std::tuple<int, int>, std::allocator<std::tuple<int, int> > >(), (& p2)->s td::vector<_Tp, _Alloc>::end<std::tuple<int, int>, std::allocator<std::tuple<int, int> > >(), (*(const std::tuple<int, int>*)(& board)->std::vector<_ Tp, _Alloc>::operator[]<std::tuple<int, int>, std::allocator<std::tuple<int, int> > >(((std::vector<std::tuple<int, int> >::size_type)i))))’ from ‘__ gnu_cxx::__normal_iterator<std::tuple<int, int>*, std::vector<std::tuple<int, int> > >’ to ‘bool’
Таким образом, вопрос, могу ли я использовать зЬй :: find_if найти зЬй :: кортеж в качестве станд :: вектор. И если нет, то как вы можете найти кортеж в векторе.
Примечание: я включил: iostream, строку, кортеж, вектор и алгоритм и использую пространство имен std.
http://en.cppreference.com/w/cpp/algorithm/find - см. Возвращаемое значение –
спасибо за ссылку, по-прежнему получаю аналогичную ошибку, используя std :: find_if хотя –
Я ничего не говорил о используя 'std :: find_if' (эта страница касается как' std :: find', так и 'std :: find_if'), я сказал, прочитав раздел Возвращаемое значение, потому что вы, кажется, смущены тем, что' std :: find' возвращается. –