hello all….
i am developing project for iphone and android both in cocos2dx…i have 1 ccarray of names i want to make it appear in alphabetical order on the screen,plz help i am new in cocos…
Use std::sort
with custom functor.
std::sort(sorted->data->arr, sorted->data->arr + sorted->data->num, comp);
Hi sergey thanks for your reply… i am trying to use this but i am getting 9 semantic issue in stl_algo.h and stl_heap.h file…may be i am mistake in comparator plz tell me how to use it correctly….
Check that comparator have signature (CCObject *, CCObject *) -> bool
.
thanks…yes my comparator has different signature have look on this….
static bool compareCCString(const CCString* p1, const CCString* p2)
{
return strcmp(p1~~>getCString,p2~~>getCString());
}
if i convert it to ccobect then how can i make comparison of string…
hello i change it as u said…
static bool compareCCString(const CCObject* p1, const CCObject* p2)
{
const char* obj = (const char**)p1;
const char** obj1 = (const char*)p2;
return strcmp(obj,obj1);
}
and i am calling as…
std::sort(allKeys~~>data~~>arr, allKeys~~>data~~>arr + allKeys~~>data~~>num, compareCCString);
where allkeys are CCArray
still result is not correct
Don’t cast const CCObject *
to const char *
. Use static_cast
to easily detect such errors.
hi sergey thanks for your help…
i got the result finally…
now i am calling strcmp function inside of comparator function instead of these i am comparing string on my own…
here is my code…
static bool compareCCString(const CCObject* p1, const CCObject* p2)
{
CCString* obj = (CCString**)p1;
CCString** obj1 = (CCString*)p2;
int temp_length1 = sizeof(obj->getCString());
int temp_length2 = sizeof(obj1->getCString());
int i=0;
while ((i < temp_length1) && (i < temp_length2))
{
if (tolower (obj->getCString()[i]) < tolower (obj1->getCString()[i]))
return true;
else if (tolower (obj->getCString()[i]) > tolower (obj1->getCString()[i]))
return false;
i++;
}
return false;
}
again thanks
sizeof
returns size of pointer, but not size of underlying string.