make_heap и сортировка координат x и y - PullRequest
0 голосов
/ 26 декабря 2011

Я хочу получить максимальную координату ( x, y ) Ниже приведен код, который я написал, это правильный код.

#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>

struct item_t {
    int x;
    int y;
    item_t( int h, int w ) : x(h), y(w) {}
    friend std::ostream& operator<<(std::ostream& os, const item_t& gt) {
        os << "(" << gt.x << "," << gt.y << ")";
        return os;
    }
};
typedef std::vector<item_t> item_list_t;
typedef item_list_t::iterator item_list_itr_t;

struct compare_x_y {
    bool operator ()(const item_t& left, const item_t& right) const {
        return left.x < right.x && left.y < right.y;
    }
};


int main ( int argc, char **argv) { 
    item_list_t items;

    items.push_back(item_t(15, 176));
    items.push_back(item_t(65, 97));
    items.push_back(item_t(72, 43));
    items.push_back(item_t(102, 6));
    items.push_back(item_t(191, 189));
    items.push_back(item_t(90, 163));
    items.push_back(item_t(44, 168));
    items.push_back(item_t(39, 47));
    items.push_back(item_t(123, 37));

    std::make_heap (items.begin(),items.end(),compare_x_y());
    std::cout << "initial max heap   : " << "(" << items.front().x <<"," << items.front().y << ")" << std::endl;


}

Работает ли он для этого входа, но не для других входов.

1 Ответ

5 голосов
/ 26 декабря 2011

Ваша функция сравнения не является строгим слабым порядком , поэтому ее использование даст неопределенные результаты.

Это не строгий слабый порядок, поскольку отношение эквивалентности не транзитивно.Например, (2,2) эквивалентно (4,1), а (4,1) эквивалентно (3,3).Но (2,2) не эквивалентно (3,3).(Два значения считаются эквивалентными, если ни одно из них не меньше другого).

Вам потребуется предоставить другую функцию сравнения.Некоторые примеры:

  • Сравните x, а затем y, если значения x были равны.
  • Сравните значения x+y для двух точек.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...