0

我编写了一个模板函数,用于测试给定容器中是否有键或值。

template<typename T>
bool has_key(const T &t, const typename T::key_type &key) {
    return t.find(key) != t.end();
}
template<typename T>
bool has_key(const T &t, const typename T::value_type &v) {
    for (auto i = t.begin(); i != t.end(); i++) {
        if (*i == v) return true;
    }
    return false;
}

它适用于std::mapand std::vector。但是当容器是 时std::set,会发现一个模棱两可的错误。因为std::set定义了key_typevalue_type,并且它们是相同的类型。所以我的问题是如何解决这个问题?谢谢!

4

1 回答 1

1

使用 std::set 两种方法将具有相同的签名。您需要通过更改方法名称之一或添加虚拟参数来消除歧义。例如

bool has_key_for_value(const T &t, const typename T::value_type &v);

但是请注意,您可以直接使用std::find轻松解决您的问题

于 2014-10-25T13:13:23.823 回答