命令历史系统的最佳方法

时间:2013-05-05 22:10:20

标签: c++ allegro

好吧,我不知道如何在标题中解释我的问题,但基本上我想要实现的是使用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);
    }
}

我假设向量是一个选项,但是有没有办法将这些值配对在一起?

1 个答案:

答案 0 :(得分:1)

使用std::pair

std::vector< std::pair <std::string, Point> > >

或者只是声明自己的结构

struct HistoryEntry
{
    std::string input;
    Point point;
};

std::vector<HistoryEntry>