减少地图查找时间

Reducing map look-up times

缩放以下两个程序结构时速度是否有显着差异:

map<string, std::function<string()>> myMap = {
    {"hello", [](){ return " world"; }}
};

int main()
{
    cout << "hello" << myMap["hello"]();
    return 0;
}

对比

int main()
{
    map<string, std::function<string()>> myMap;
    myMap["hello"] = [](){ return " world"; };

    cout << "hello" << myMap["hello"]();

    return 0;
}

我的一部分想认为全局初始化的 myMap 会更快,但由于地图是 stl 的一部分,这让我觉得不可能填充实际地图直到运行时,因为它在内部使用动态内存分配(不像全局初始化的 int 数组,它被烘焙到可执行文件中,例如)。我是否正确地认为这两种方法在减少在地图中查找某些内容的时间方面实际上是相同的?

你说得对,全局地图要等程序启动才能初始化运行。两种初始化形式之间没有性能差异,只是发生在 main 开始之前或之后的不同。访问地图时,查找时间也没有差异。

与 C 程序不同,C++ 程序有一个 动态初始化 阶段,当初始化需要在运行时构造的全局变量时。这与 静态初始化 不同,后者是简单类型(例如具有常量初始值设定项的整数数组)获取其值的方式,这通常在编译时完成并嵌入到可执行文件中.