2016-12-09 2 views
-1

Я хочу отсортировать вектор, в котором тип элемента является классом, определенным мной в следующем коде.Что такое правильный способ сортировки по возрастанию в C++ при перегрузке сравнительного символа «<»

struct Node { 
    int _x; 
    int _y; 
    int _h; 
    Node(int x, int y, int h) : _x(x), _y(y), _h(h) {} 
    bool operator<(const Node &p) const { 
     return _h > p._h; // > or < 
    } 
}; 

vector<Node> v; //priority_queue<Node> p; 
...//push some objects 
sort(v.begin(), v.end()); 

Это очень странно, что иногда я использую «вернуться _h> p._h» перегружать функцию, чтобы получить возрастающий порядок, но иногда это нисходящий. Может быть, не в векторе, а в другой структуре даты, которая использует сравнительную функцию, например, priority_queue, map и т. Д.

Есть ли какие-либо подробные документы для введения сравнительной функции?

Решено. Я думаю, что у меня плохая память.

+1

http://en.cppreference.com/w/cpp/algorithm/sort –

+0

Можете ли вы показать пример, где вы, возможно, иногда получаете другой порядок? – user463035818

+0

@ tobi303 извините, я забыл, но я уверен, что встречался с проблемой сортировки несколько раз – vinllen

ответ

1

http://en.cppreference.com/w/cpp/algorithm/sort

функция сравнения объект (т.е. объект, который удовлетворяет требованиям из сравнения), который возвращает истину, если первый аргумент меньше, чем (т.е. заказана раньше) второй.

Использование такой функции sort(v.begin(), v.end()); сортирует по возрастанию.

+0

Спасибо, но если функция перегрузки находится в классе, как показано выше, этот аргумент является первым ? – vinllen

+1

@vinllen 'this -> _ h' - левая сторона (первая). Поэтому вам следует изменить сравнение выводов. –

 Смежные вопросы

  • Нет связанных вопросов^_^