Компаратор для set [требует правки]

309
22 марта 2017, 18:29

Подскажите пожалуйста как написать свой компаратор для set.
Это будет использоваться в целях спортивного программирования.
Так что желательно попроще и поменьше кода.

Answer 1

Творчески перерабатывая пример @Qwertiy :)

int main()
{
    auto cmp = [](int a, int b) { return a > b; };
    set <int, decltype(cmp)> s(cmp);
    s.insert(2);
    s.insert(20);
    s.insert(12);
    s.insert(-7);
    for (int x : s)
        cout << x << ' ';
    return 0;
}
Answer 2

Берем предикат

bool compare(X const& lhs, X const& rhs) {
  return lhs < rhs;
}

и делаем из него класс:

#include <type_traits>
using Compare = std::integral_constant<decltype(&compare), &compare>;

Теперь его можно использовать как компаратор:

std::set<X, Compare> set;
Answer 3

http://ideone.com/T2saIg

#include <iostream>
#include <set>
using namespace std;
struct cmp
{
    bool operator() (const int &a, const int &b)
    {
        // returns true if a should go before b
        return a > b;
    }
};
int main()
{
    set <int, cmp> s;
    s.insert(2);
    s.insert(20);
    s.insert(12);
    s.insert(-7);
    for (int x : s)
        cout << x << ' ';
    return 0;
}
READ ALSO
Перевод const char* в const u_char*

Перевод const char* в const u_char*

Я работаю с двумя функциями из сторонних библиотекОдна возвращает const char*, а другая принимает const u_char*

210
Не могу понять ,как создать пустой список указателей на объект через std :: vector

Не могу понять ,как создать пустой список указателей на объект через std :: vector

Создать пустой список указателей на объекты класса Круг, используя коллекции языка С++ (например, std::vector<T>)

180
Как передать параметр в callback?

Как передать параметр в callback?

Есть функция внутри метода, находящая необходимую клетку на поле:

185