Вы можете просто сделать
std::sort(data.begin(), data.end());
И это будет сортировать ваши строки. Затем просмотрите их, проверяя, в порядке ли они
if(names.empty())
return true; // empty vector sorted correctly
for(std::vector<std::string>::iterator i=names.begin(), j=i+1;
j != names.end();
++i, ++j)
if(*i > *j)
return false;
return true; // sort verified
В частности, std::string::compare
нельзя использовать в качестве компаратора, потому что он не делает то, что хочет sort
: вернуть true, если первый аргумент меньше второго, и вернуть false в противном случае. Если вы используете sort
, как указано выше, он просто будет использовать operator<
, что будет делать именно это (то есть std::string
заставляет его возвращать first.compare(second) < 0
).