无法编译 unordered_set 包含来自 cppreference.com 的函数
Cannot compile unordered_set contains function from cppreference.com
我觉得这只会发生在我身上,但这是我在查找 unordered_set 的 contains 函数时发现的一个奇怪之处。这是 link 我尝试 运行 下面的示例 here
contains() 不存在但它确实存在,这对我来说似乎很奇怪?我的编译器也出现同样的错误。 std 库是否丢失了一个神经元?
您的编译器附带的标准库很可能还不支持此功能。 contains()
是在 C++20 中添加的。而 C++20 甚至还没有出来……
据我所知,包含 contains()
成员函数的提案的最新版本是 P0919r3. You can check the C++20 implementation status for GCC here。如果你这样做,你会看到,在撰写本文时,它还没有实现……
正如您在 cppreference 上看到的那样,此成员函数仅从 C++20 开始受支持。
幸运的是,有一个简单的解决方法:
if(example.find(2)!=example.end()) {...}
如果这样太难看,你可以定义:
template <class C, class T>
bool contains (C &c, T t) {
return c.find(t)!=c.end();
}
然后写
if(contains(example,2)) { ... }
我觉得这只会发生在我身上,但这是我在查找 unordered_set 的 contains 函数时发现的一个奇怪之处。这是 link 我尝试 运行 下面的示例 here
contains() 不存在但它确实存在,这对我来说似乎很奇怪?我的编译器也出现同样的错误。 std 库是否丢失了一个神经元?
您的编译器附带的标准库很可能还不支持此功能。 contains()
是在 C++20 中添加的。而 C++20 甚至还没有出来……
据我所知,包含 contains()
成员函数的提案的最新版本是 P0919r3. You can check the C++20 implementation status for GCC here。如果你这样做,你会看到,在撰写本文时,它还没有实现……
正如您在 cppreference 上看到的那样,此成员函数仅从 C++20 开始受支持。
幸运的是,有一个简单的解决方法:
if(example.find(2)!=example.end()) {...}
如果这样太难看,你可以定义:
template <class C, class T>
bool contains (C &c, T t) {
return c.find(t)!=c.end();
}
然后写
if(contains(example,2)) { ... }