使用地图作为“电话簿”

时间:2014-04-22 10:07:03

标签: c++ map stl

我有一些与此类似的代码

enum Days
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
};

typedef void (*DailyFunction)(int);

namespace DailyFunctions
{
    void monday(int SomeData);
    void tuesday(int SomeData);
    void wednesday(int SomeData);
    void thursday(int SomeData);
    void friday(int SomeData);
    void saturday(int SomeData);
    void sunday(int SomeData);
}

和我的代码中的其他一些我使用switch语句将一个DailyFunction分配给DailyFunction ptr。 当我第三次输入(或多或少)相同的开关语句时,我有了想法,有一张地图会很棒

std::map<Days, DailyFunction> MyPhonebookMap

这将允许我做这样的事情:

DailyFunction Function_ptr = MyPhonebookMap[WeekDay];

对我而言,似乎定义这样一个地图的最佳位置将在函数声明

下的名称空间DailyFunctions中

但是我如何在那里定义一个const map(因为它不应该改变)并同时填充它?

2 个答案:

答案 0 :(得分:1)

您可以使用提升功能boost::assign::map_list_of或使用复制构造函数从已构建的const map初始化map

#include <map>

int main()
{
    std::map<Days, DailyFunction> m;
    m[ MONDAY] = &monday;
    //... initialize m entries
    std::map<Days, DailyFunction> const mc( m);
    //...
    return 0;
}

答案 1 :(得分:0)

在您的情况下,可以使用简单的数组而不是地图。你可以拥有const数组的初始化器,而且它可以更快地工作。

    DailyFunction funcs[] = {monday, tuesday, wednesday, thursday, friday, satureday, sunday};

或者,如果您使用C ++ 11,则可以使用启动器列表,如此处所述Initializing a static std::map<int, int> in C++