当我想从std::map中获取某个元素时,据我所知at()会进行边界检查。这是否意味着它比[]慢?
std::map
at()
[]
2guxujil1#
std::map::at和std::map::operator[]都检查键的存在。前者在没有找到时抛出异常,后者创建默认值。它们的复杂度必须是log(n)(查找)。性能本身并不必须相同,但在实践中应该相似。因此,从它们的行为中选择要使用的一个(在查找之后)。类似的替代方案可能是map::find,或者在某些情况下是map::insert/insert_or_assign/emplace。
std::map::at
std::map::operator[]
log(n)
map::find
map::insert
insert_or_assign
emplace
1条答案
按热度按时间2guxujil1#
std::map::at
和std::map::operator[]
都检查键的存在。前者在没有找到时抛出异常,后者创建默认值。它们的复杂度必须是
log(n)
(查找)。性能本身并不必须相同,但在实践中应该相似。因此,从它们的行为中选择要使用的一个(在查找之后)。类似的替代方案可能是
map::find
,或者在某些情况下是map::insert
/insert_or_assign
/emplace
。