C++ `std::map::at()`不支持std::string\u视图吗?

C++ `std::map::at()`不支持std::string\u视图吗?,c++,C++,我在代码中大量使用异常,因此我更喜欢使用at()而不是find()来查找元素,但我刚刚发现at()似乎不支持std::string\u view,例如: #include <map> #include <iostream> std::map<std::string, int, std::less<>> map{ {"one", 1}, {"two", 2}, }; const char* c

我在代码中大量使用异常,因此我更喜欢使用
at()
而不是
find()
来查找元素,但我刚刚发现
at()
似乎不支持
std::string\u view
,例如:

#include <map>
#include <iostream>
std::map<std::string, int, std::less<>> map{
    {"one", 1},
    {"two", 2},
};

const char* c = "onetwothree";

int main() {
  std::string_view s(&c[3], 3);
  std::cout << map.find(s)->second << std::endl;
  std::cout << map.at(s) << std::endl; // will not compile
}
#包括
#包括
地图{
{“一”,1},
{“两个”,2},
};
const char*c=“一对三”;
int main(){
std::string_视图s(&c[3],3);

std::cout second自C++14标准以来,该函数已模板化重载,支持与键等效的值


该函数没有此类重载。传递给
at
的值必须与键的类型相同(或隐式转换为键的类型)。

我不认为
at
有充分的理由不支持这一点。当找不到值时,它不必在映射中插入任何内容(因此不必尝试将随机对象类型转换为键类型),这样就可以进行透明查找。
操作符[]
对此不起作用。我认为
at
不支持它,因为它应该与
操作符[]配对
在很多方面。@Someprogrammerdude我认为透明的比较器(即
less
)是用于异构查找的?(调用
find
至少在其他情况下不会编译。)