为什么没有透明的C++ 1x std :: map :: at?

bob*_*bah 8 c++ language-lawyer c++11 c++14

是否有理由错过透明(template <class K> at(K&& key);)std::map

Leo*_*eon 7

我的猜测是std::map::at()必须是"边界检查"的版本std::map::operator[]().提供透明版本std::map::operator[]()会对std::map::key_type查询键类型施加额外要求K- 如果查询键不在映射中,则必须插入(使用默认构造值),这意味着std::map::key_type必须可以从查询键类型构造.

  • 这确实是对的!我会在未来的读者留下我的评论,但它在逻辑上被撤回. (4认同)
  • @SergeyA这两种类型不需要是可转换的 - 它们只需要通过透明比较器进行比较. (3认同)
  • 此外,与同类情况不同,不要求异构密钥与映射中的至多一个密钥进行比较.如果匹配多个密钥,您会返回什么? (2认同)
  • @krzaq除了`find`也是多映射的既定操作. (2认同)