c++ - 使用静态字符串值访问 std::map 时,访问时间是否仍然为 O(log n)?

标签 c++ performance map stl std

std::map<string, int> dict;
for(int i = 0; i < 300; ++i)
{
    dict["afsfgsdg"] = i*i;
    dict["5t3rfb"] = i;
    dict["fddss"] = i-1;
    dict["u4ffd"] = i/3;
    dict["vgfd3"] = i%3;
}

由于字符串值在编译时已知,编译器会在编译时对它们进行哈希处理,而不是在运行时对这些字符串进行哈希处理吗?

最佳答案

std::map 不会散列任何内容。它使用比较来查找元素,其 O(lg n) 界限是映射中有 n 键时所需的比较次数。它没有表达任何关于比较本身的成本。

即该程序可能会使用一些短路字符串比较,首先进行指针比较,但在最坏的情况下比较次数将保持对数(当项目位于树中的叶子之一时,对于典型的红黑树实现)。

关于c++ - 使用静态字符串值访问 std::map 时,访问时间是否仍然为 O(log n)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918187/

相关文章:

c++ - 如何在 c++ 中随机但非常少量的时间在 for 循环中旋转?

c++ - 如何使用KDTree进行任意维度的top-k查询和范围查询

c# - 如何最小化序列化数据的大小

c++ - STD Map clear() 奇怪的行为

c++ - 无法编译 OpenGL Superbible 7th 示例(未解析的外部符号)

C++ ofstream不会将预期的数字写入文件

C# 异常过滤器性能

performance - 使用 Google Drive API 转移所有用户文件所有权的最有效流程

java - 仅使用字符串和值解析 JSON 对象

grails - 在Grails中为 map 值建模的最佳方法?