0

好的,我不确定如何在标题中解释我的问题,但基本上我想要实现的是使用 Allegro 的“命令行”式 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);
    }
}

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

4

1 回答 1

1

利用std::pair

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

或者只是声明你自己的结构

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

std::vector<HistoryEntry>
于 2013-05-05T22:12:30.817 回答