Неверный компаратор в STD :: Sort из -за того же, что и тот же результат в обоих заказахC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неверный компаратор в STD :: Sort из -за того же, что и тот же результат в обоих заказах

Сообщение Anonymous »

Я сортирую вектор структур, std :: vector , где drive_or_dir определяется как

Код: Выделить всё

typedef struct {
std::string path;
boolean isDrive;
} DRIVE_OR_DIR
< /code>
Идея состоит в том, что элементы должны быть отсортированы как, например, < /p>
C:         isDrive=true
C:\Dir1    isDrive=false (directory, follows parent drive)
D:         isDrive=true
E:         isDrive=true
Сортировка называется как std :: sort (v.begin (), v.end (), compareitems);
function:

Код: Выделить всё

bool CompareItems(const DRIVE_OR_DIR& a, const DRIVE_OR_DIR& b) {
// Drive-vs.-Dir tiebreaker
if (a.isDrive && !b.isDrive || !a.isDrive && b.isDrive) {
if (a.isDrive) { // BLOCK 1
return (strcmp(a.path.c_str(), b.path.c_str()) < 0) ? true : false;
} else { // BLOCK 2
return (strcmp(b.path.c_str(), a.path.c_str()) < 0) ? true : false;
}
else {
// Like items
return (strcmp(a.path.c_str(), b.path.c_str()) < 0) ? true : false;
}
}
< /code>
В отладчике я вижу: < /p>
1. a = C:
b = C:\\MyDir1
Result = true

2. a = C:\\MyDir1
b = C:\\
Result = true
Оба из них имеют Result = true .
Я получаю ошибку недействительного компаратора .
Но это правильное поведение. Они оба верны, потому что они выполняются в разных условиях. В одном случае A.IsDrive действует, а в другом - действует. Если эти два элемента сравнивались в любом порядке, они не должны быть повторно подготовлены, но если они есть, результаты, как и ожидалось.

Подробнее здесь: https://stackoverflow.com/questions/796 ... oth-orders
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Разница между Collections.sort(список) и Collections.sort(список,компаратор)
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Временная сложность std:sort в случае, если пользовательский компаратор равен O (N)
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Почему Java's Arrays.sort (int []) в 5 × быстрее, чем c ++ std :: sort (vector )?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему Java's Arrays.sort (int []) в 5 × быстрее, чем c ++ std :: sort (vector )?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему Java's Arrays.sort (int []) в 5 × быстрее, чем c ++ std :: sort (vector )?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»