Хорошо, я не был уверен, как объяснить свой вопрос в заголовке, но в основном я пытаюсь добиться интерфейса с интерфейсом командной строки, использующего Allegro. Графика работает нормально, но метод сохранения истории не работает по очевидным причинам. Я использую карту для хранения значений, которые были действительно глупы с моей стороны. Каждый раз, когда я добавляю в историю команду, которая была такой же, как и предыдущая, предыдущая исчезает. Я хочу знать, есть ли способ сохранить значения таким образом, чтобы они не были перезаписаны, как они есть на карте?
Вот мой текущий метод
У меня есть структура под названием Point
struct Point {
float x, y;
Point() { this->x = 10.0; this->y = 440.0; }
Point(float x, float y): x(x), y(y) { };
};
Я использую это для хранения точек, где будет отображаться текст, который используется частью обработки моей графики.
Это мой класс HistoryManager, определенный в HistoryManager.h
class HistoryManager {
public:
HistoryManager();
~HistoryManager();
bool firstEntry;
map<string, Point> history;
void add_to_history(string);
private:
void update();
};
И вот определения в HistoryManager.cpp
HistoryManager::HistoryManager() { this->firstEntry = false; }
HistoryManager::~HistoryManager() { }
void HistoryManager::add_to_history(string input) {
if (!this->firstEntry) {
this->history[input] = Point(10.0, 440.0);
this->firstEntry = true;
} else {
this->update();
this->history[input] = Point(10.0, 440.0);
}
}
void HistoryManager::update() {
for (map<string, Point>::iterator i = this->history.begin(); i != this->history.end(); i++) {
this->history[(*i).first] = Point((*i).second.x, (*i).second.y-10.0);
}
}
Я предполагаю, что векторы это вариант, но есть ли способ соединить значения вместе?
использование std::pair
std::vector< std::pair <std::string, Point> > >
Или просто объявите свою собственную структуру
struct HistoryEntry
{
std::string input;
Point point;
};
std::vector<HistoryEntry>
Других решений пока нет …