c++ - insert_or_assign 允许迭代器
问题描述
我有这段代码:
auto it = my_map.lower_bound(my_key);
以下断言给了我错误:
static_assert(std::is_same<decltype(it), std::map<K, V>::const_iterator>::value, "Error");
以下是可以的:
static_assert(std::is_same<decltype(it), std::map<K, V>::iterator>::value, "Error");
然后,编译器没有给我一个const_iterator
. 行。但在这儿:
my_map.insert_or_assign(it, my_key, some_val);
即使使用iterator
(not const_iterator
),该功能也可以正常工作。但是,在这个链接中,关于insert_or_assign
签名,我只有const_iterator
论据。我还在 Visual Studio 上搜索了该.h
文件,并且此信息匹配。在 GCC 7.2+ 和 Visual Studio 2015 上测试,一切都可以编译和运行。
为什么会编译?为什么insert_or_assign
接受iterator
?
解决方案
所有容器都必须提供iterator
可转换为const_iterator
. 请参阅容器要求表
X::iterator
必须是满足前向迭代器要求的任何迭代器类别。可转换为X::const_iterator
.
所以 aconst_iterator
是从调用iterator
返回的 by构造的。lower_bound
insert_or_assign
推荐阅读
- python - 在本地运行 Python Azure 函数的 VSCode 失败并出现 ModuleNotFoundError
- php - Laravel Excel 导出 - 类型错误:传递给 Maatwebsite\Excel\Excel::download() 的参数 2 必须是字符串类型
- react-native - react-fetch-blob 使用 downloadManager 时不会调用进度
- c# - 您必须从 Disposed 订阅吗?
- javascript - Paylike 模态金额参数
- java - Hibernate 3 到 4 迁移
- c# - 找不到“Vektor2”
- bash - 检查第一列是否有 4 位数字,如果不是用零填充
- bash - 遍历 bash 中 curl 请求的列表
- c# - 我想将 SQL Server 2019 连接到 Unity 吗?如何摆脱这些错误?统一2019.2.11f1