У меня есть вектор пар, который на самом деле просто хранит информацию о том, активны ли ячейки в 2D-сетке.
vector<pair <int,int>> cellsActive;
Теперь я пытаюсь напечатать произвольную часть всей 2D-сетки, в которой все неактивные клетки представлены .
, а активные клетки представлены #
.
Я реализовал это следующим образом:
- Создайте массив
myGrid
размером с 2D-сетку и установите для каждого символа .
- Итерируйте по вектор
cellsActive
и получите каждую активную ячейку: activeCell
- Измените сетку так, чтобы каждое местоположение
activeCell
(pair <int int>
) теперь представлялось #
; myGrid[activeCell.first][activeCell.second] = "#"
- Теперь, когда
myGrid
правильно содержит значения всех ячеек; l oop через произвольную часть myGrid
и распечатайте его.
Однако я чувствую, что смогу сделать это более эффективно, просто распечатав произвольную часть, которую я хочу напечатать как .
, за исключением соответствующих activeCell
местоположений, которые должны быть напечатан в виде #
. Если я найду способ сделать это таким образом, мне не нужно будет создавать всю двумерную сетку, а затем l oop через нее снова, чтобы напечатать ее. Но с другой стороны, я не знаю, как эффективно go через список cellsActive
и найти соответствующие ячейки, которые мне нужно представить с помощью #
.
Т.е. я мог бы сделать это:
for (int y=0; y<arbitrary_y;y++) {
for (int x=0; x<arbitrary_x;x++) {
pair <int int> j = make_pair(y, x);
vector<intpair>::iterator it = find(cellsActive.begin(), cellsActive.end(), j);
if (it != cellsActive.end()) {
cout << "#";
}
else {
cout << ".";
}
}
}
, но тогда мне придется каждый раз искать по всему вектору cellsActive
, что кажется вычислительно неэффективным, если cellsActive
и arbitrary_x
и arbitrary_y
большие.
Мой вопрос: какой вычислительный самый эффективный способ распечатать эти .
и #
на C ++?