如何使用 STL 容器的概念?

How to use a concept for STL containers?

基于这个旧的堆栈溢出问题

我发现可以为 STL 容器定义一个概念。但是,我不确定如何将这个概念实际应用于任何事物,因为它需要 2 个容器,容器 a 和容器 b。

例如,取最多赞回答的签名

template <class ContainerType> 
    concept Container = requires(ContainerType a, const ContainerType b) 

我只见过仅与 1 个需求参数一起使用的概念,就像这样

//source: https://en.cppreference.com/w/cpp/language/constraints
template<typename T>
concept Hashable = requires(T a)
{
    { std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
};
 
struct meow {};
 
// Constrained C++20 function template:
template<Hashable T>
void f(T) {}
//
// Alternative ways to apply the same constraint:
// template<typename T>
//     requires Hashable<T>
// void f(T) {}
//
// template<typename T>
// void f(T) requires Hashable<T> {}
 
int main()
{
    using std::operator""s;
 
    f("abc"s);    // OK, std::string satisfies Hashable
    // f(meow{}); // Error: meow does not satisfy Hashable
}

这个概念的定义实际上是

 template <class ContainerType> 
 concept Container = /* */;

仅约束 一个 类型 ContainerType,因此应用此概念的函数将是

 template <Container C>
 void f(C& c);