【发布时间】:2021-10-04 00:52:29
【问题描述】:
#include <set>
#include <string>
#include <string_view>
using namespace std::literals;
int main()
{
auto coll = std::set<std::string, std::less<>>{"abc"s, "xyz"s};
coll.find("abc"sv); // ok
coll.extract("abc"sv); // error
}
为什么 std::set::extract 不支持异构查找 std::set::find?
【问题讨论】:
-
这不是您问题的答案,但您可以通过使用
coll.extract(coll.find("abc"sv));绕过此限制而不会造成太多(如果有的话)性能损失 -
@Kaznov - 差不多。 IIUC 您传递给
extract的迭代器必须有效。因此,需要在尝试提取之前检查结束迭代器。尽管如此,这还是有一个非常合理的解决方法的好处。 -
建议为P2077R2。
标签: c++ stl c++17 c++14 standards