我正在尝试使用二进制搜索模板,当我使用原语“int”运行它时代码运行正常但是当我用“string”运行它时我得到了错误
“没有匹配函数调用binary_search_template”
为什么它适用于整数而不是字符串?
这是代码
main{
std::vector<string> e;
e.push_back("a");
e.push_back("b");
e.push_back("c");
int index = binary_search_template(e, 0, d.size()-1.0, "a"); //error for strings but not ints
}
头文件
template<typename T>
int binary_search_template(std::vector<T>& a, int from, int to, T value);
template<typename T>
int binary_search_template(std::vector<T>& a, int from, int to, T value)
{
if (from > to) {
return -1;
}
int mid = (to + from)/2;
if (a[mid] == value ) {
return mid;
}else if (a[mid] < value) {
return binary_search_template(a, mid+1, to, value);
}else {
return binary_search_template(a, from, mid, value);
}
}
答案 0 :(得分:3)
当您使用T
和字符串文字时,编译器会看到std::vector<std::string>
类型的两个候选项:
std::string
char const*
你需要记住,例如,将参数传递为std::string("a")
。或者,您可以为最后一个参数使用其他模板参数。