|
|
1
11
除了前面提到的比较字符串的时间复杂性之外,字符串键还将在每次将项添加到容器时导致额外的内存分配。在某些情况下,例如高度并行系统,全局分配器互斥可能是性能问题的根源。 通常,您应该选择在您的情况下最有意义的替代方案,并且仅根据实际性能测试进行优化。众所周知,很难判断什么是瓶颈。 |
|
|
2
14
分析算法的渐近性能就是研究必须执行的操作以及它们给方程增加的成本。为此,您需要首先了解所执行的操作,然后评估其成本。
在平衡二叉树(映射恰好是)中搜索密钥需要
当你把所有的成本加起来,用整数作为键,总成本是
如果使用字符串作为键,则总成本为
请注意,big-O表示法最适合用作分析工具,以确定当问题规模增大时算法将如何运行,但它隐藏了许多对原始性能很重要的事实。
许多其他隐藏成本也是如此,因为创建元素的成本通常被视为一个恒定时间操作,这只是因为它不取决于问题的参数(在每个分配中定位内存块的成本不取决于您的数据集,但是,在算法分析范围之外的内存碎片上,在malloc内获取锁以确保两个进程不会尝试返回同一内存块的成本取决于锁的争用,而锁争用本身取决于处理器、进程的数量以及它们执行的内存请求量。。。,再次超出了算法分析的范围)。当阅读大O符号的成本时,你必须意识到它的真正含义。 |
|
|
3
1
在比较两个字符串时,必须取消对指针的引用以获得第一个字符,并对它们进行比较。如果它们相同,则必须比较第二个字符,依此类推。如果您的字符串有一个很长的公共前缀,这可能会使处理速度减慢一点。不过,它不太可能像比较整数那样快。 |
|
|
4
1
除了这些明显的差异,没有重大的性能成本。 |
|
|
5
0
首先,我怀疑在实际应用程序中,是否有字符串键或int键会产生明显的区别。分析应用程序将告诉您它是否重要。
现在对两个字符串的散列进行int比较。如果散列不同,字符串肯定不同。如果哈希值相同,则仍然需要比较字符串,因为 Pigeonhole Principle . |
|
|
6
0
一个简单的例子是,仅访问两个具有相同键数的映射中的值-一个int键另一个具有相同int值的字符串使用字符串所需的时间要长8倍。 |
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 3 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |