【发布时间】:2016-12-28 04:09:19
【问题描述】:
#include <map>
#include <string>
#include <string_view>
using namespace std;
int main()
{
string_view key = "hello";
map<string, int, less<>> coll;
coll.find(key); // ok
coll[key] = 0; // !!! error ???
}
密钥类型为std::string,兼容类型为std::string_view。从 C++14 开始,std::map::find 允许使用兼容的密钥;所以coll.find(key); 没问题。
但是,为什么不coll[key] = 0;也可以?
【问题讨论】:
-
因为 [] 在 14 中没有得到更多的重载,不像 find...?
-
operator[]在找不到时也会插入 -
@deviantfan,为什么不超载 []?
-
@Danh 当参数可转换为 key_type 时,这可能不是问题。
-
@Orient 这个问题写得不好,他想问的是为什么关联没有异构比较