c++ - 带有比较器的模板向量中的 min_element。编译错误
问题描述
我有一个模板向量std::vector<T> beginStore;
,我想在该向量中找到最小值。所以,首先我像这样实现它:
template<typename T, typename Comp = DefaultComp>
//some code
T min = beginStore.at(0);
size_t ind = 0;
for (int i = 1; i < beginStore.size(); ++i) {
if (Comp::compare(*beginStore.at(i), *min)) {
min = beginStore.at(i);
ind = i;
}
}
我的比较器在哪里:
struct DefaultComp {
template<typename T>
static bool compare(T a, T b) {
return a < b;
}
};
然后我想使用 C++17 的所有功能并使用 std::min_element 和 std::distance:
auto min = std::min_element(beginStore.begin(),beginStore.end(),Comp::compare);
auto ind = std::distance(beginStore.begin(),min);
然后它会出现这样的错误:
没有匹配函数调用'min_element' auto min = std::min_element(beginStore.begin(),beginStore.end(),Comp::compare);
我已经尝试std::greater
、实施operator()
、使用不同的比较器,如下所示:
struct myclass {
template<typename T>
bool operator() (T i,T j) { return i<j; }
} myobj;
但我无法获得成功。 UPD很抱歉让您感到困惑,但向量包含指针。重写 std::distance。真的,这不是我想要的。
解决方案
DefaulComp::compare
是模板,因此您不能以这种方式将其传递给std::min_element
.
要么提供类型
std::min_element(beginStore.begin(), beginStore.end(), &Comp::compare<int>);
或将其包装在仿函数中:
std::min_element(beginStore.begin(),
beginStore.end(),
[](const auto& lhs, const auto& rhs){ return Comp::compare(lhs, rhs); });
推荐阅读
- wordpress - 如何编辑 Yith Woocommerce 订阅文本“/20 月”
- c# - 以特定值开头的行拆分字符串
- javascript - 如何从 Firefox 扩展转储和转换索引 DB sqlite 数据库的二进制 blob
- javascript - 如何“观察” .onchange 数组中的所有元素
- r - 使用 Rmarkdown 生成 pdf 文件失败
- java - 通过单击 JButton 清除 JTextField
- r - 在 R 中计算数据并生成行
- c# - 无法将 System.IServiceProvider 类型隐式转换为 ServiceProvider
- php - 按客户分组随机发票列表
- reactjs - TypeError: this.props.setLoginDisabled 不是函数