gpt4 book ai didi

c++ - 对 std::string 数组进行二进制搜索

转载 作者:太空狗 更新时间:2023-10-29 23:39:21 27 4
gpt4 key购买 nike

下面是代码和

std::string str[5] = {"Tejas","Mejas","Rajas","Pojas","Ljas"};
std::sort(str,str+5);
size_t test = bin_search("Ljas",str,5);

这是二分查找的通用函数

 template<class T>
size_t bin_search(T x, T* array, int n)
{
size_t begin = 0, end = n;
// Invariant: This function will eventually return a value in the range [begin, end]
while (begin != end) {
size_t mid = (begin + end) / 2;
if (array[mid] < x) {
begin = mid + 1;
} else {
end = mid;
}
}
return begin; // Or return end, because begin == end
}

错误是

 main.cpp|12|error: no matching function for call to 'bin_search(const char [5], std::string [5], int)'|

只有 std::string 数组有问题,但 int 数组工作得很好。它是否适用于字符串数组,或者逻辑中是否缺少任何内容?

最佳答案

正如错误消息试图告诉您的那样,"Ljas" 不是 std::string,而是 const char[5]。然后 template argument deduction失败,因为无法推导类型 T(如 const char*std::string)。

您可以将其显式转换为 std::string 以使模板参数推导工作良好:

size_t test =  bin_search(std::string("Ljas"),str,5);

或显式指定模板参数以避免模板参数推导:

size_t test =  bin_search<std::string>("Ljas",str,5);

关于c++ - 对 std::string 数组进行二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com