好吧,我不知道如何在标题中解释我的问题,但基本上我想要实现的是使用Allegro的“命令行”-esque GUI。图形工作正常,但保持历史记录的方法由于显而易见的原因而无法正常工作。我正在使用地图来存储我开始时非常愚蠢的值。每次我向历史记录添加与先前历史记录相同的命令时,前一个命令都会消失。我想知道的是,有没有一种方法可以存储这些值,使它们不会像在地图中那样被覆盖?
这是我目前的方法
我有一个名为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.h中定义的HistoryManager类
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);
}
}
我假设向量是一个选项,但是有没有办法将这些值配对在一起?
答案 0 :(得分:1)
使用std::pair
std::vector< std::pair <std::string, Point> > >
或者只是声明自己的结构
struct HistoryEntry
{
std::string input;
Point point;
};
std::vector<HistoryEntry>