C++에서 lower_bound 함수를 사용하려고합니다. 1d 데이터 유형에 여러 번 사용되었습니다.char 문자열 배열에 C++ "lower_bound"적용
이제는 sorted array dict[5000][20]
에 시도하여 size <=20
의 문자열을 찾습니다. 일치시킬 문자열은 str
입니다. http://www.cplusplus.com/reference/algorithm/lower_bound/?kw=lower_bound으로 당
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);
}
,이 기능은 "지난"일치, 즉 발견되지 않는 경우 (단 이상)
tmp
동일
dictlen
되어야의 인덱스를 반환 할 예정이다. 필자의 경우 항상 시작 색인을 반환합니다. 즉,
tmp equal to 0
이 모두 1입니다.
dict
및 2에있는 문자열이 전달되었을 때
dict
에없는 문자열이 전달되었습니다.
문제는 포인터 처리 및 전달에 있다고 생각합니다. 이 경우에는 벡터의 경우 사용할 수있는 default comparator
을 사용할 수 있어야합니다. 나는 또한 명시적인 것을 전달하려고 시도했다. 나는 ALTERNATE
는 등 벡터를 사용하는 것입니다 알고 있지만, 나는이 하나의 문제를 알고 싶습니다
bool compStr(const char *a, const char *b){
return strcmp(a,b)<0;
}
-
나는이 비교를 시도했다. Google에서 검색 한 결과와 비슷하지만 비슷한 것은 없습니다.
포인터에 대한 기본 비교기는 포인터를 비교합니다. 문자열을 비교하기 위해서는 자신의 비교자가 필요하다. [] (char * lhs, char * rhs) {return strcmp (lhs, rhs) <0; }'. – zch
@zch - 필자가 사용하는 콤퍼레이터보다 위에 추가했습니다. 작동하지 않습니다. Morever, 나는 당신이 말하는 비교기의 문법을 이해하지 못한다. 제발, "[] (char * lhs, char * rhs) {return strcmp (lhs, rhs) <0;}"을 작동 구문에서 자세히 설명 할 수 있습니다. – user1412066
이것은 [lambda expression] (http://en.wikipedia.org/wiki/Anonymous_function#C.2B.2B_.28since_C.2B.2B11.29)라는 익명의 펑터에 대한 C++ 11 문법입니다.C++ 03에 해당하는 클래스는'struct StrCmp {bool operator() {...}};'클래스이고'StrCmp()'를'comp' 인수로 전달합니다. – zch