【发布时间】:2015-03-02 19:17:34
【问题描述】:
我正在尝试 C++ 中的 lower_bound 函数。 一维数据类型多次使用它。
现在,我在sorted array dict[5000][20] 上尝试查找size <=20 的字符串。
要匹配的字符串在str中。
bool recurseSerialNum(char *name,int s,int l,char (*keypad)[3],string str,char (*dict)[20],int
dictlen)
{
char (*idx)[20]= lower_bound(&dict[0],&dict[0]+dictlen,str.c_str());
int tmp=idx-dict;
if(tmp!=dictlen)
printf("%s\n",*idx);
}
根据http://www.cplusplus.com/reference/algorithm/lower_bound/?kw=lower_bound,如果找不到匹配项,该函数应该返回'last'(超出结尾)的索引,即tmp 应该等于dictlen。
在我的情况下,它总是返回开始索引,即我得到tmp equal to 0 1. 当传递一个在dict 中存在的字符串时,2. 当传递一个在dict 中不存在的字符串时。
我认为问题在于指针的处理和传递。 default comparator 应该在这种情况下可用,就像在向量的情况下可用一样。我也试过传递一个明确的,但无济于事。
我试过这个比较器 -
bool compStr(const char *a, const char *b){
return strcmp(a,b)<0;
}
我知道ALTERNATE 是使用矢量等,但我想知道这个问题。
通过 google 和 SO 对此进行了搜索,但没有找到类似的内容。
【问题讨论】:
-
指针的默认比较器比较指针。要比较字符串,您需要自己的比较器
[](char* lhs, char* rhs) { return strcmp(lhs, rhs) < 0; }。 -
@zch - 我已在我使用的比较器上方添加。它不起作用。此外,我不太了解您所指的比较器的语法。请,如果你能详细说明 "[](char* lhs, char* rhs) { return strcmp(lhs, rhs)
-
这是用于匿名函子的 C++11 语法,称为 lambda expression。在 C++03 中等效的是一个类
struct StrCmp { bool operator()(...){...} };并将StrCmp()作为comp参数传递。
标签: c++ string pointers multidimensional-array lower-bound