Почему мой приоритет_queue, который содержит объекты класса на C ++, работает правильно? [Дубликат]

Вы не можете смотреть местоположение пользователя из веб-приложения в фоновом режиме. Я проверил его на Chrome (Android M), и как только веб-приложение переходит в фоновый режим, значок GPS исчезает, и процесс позиции часов останавливается. (Когда веб-приложение снова находится на переднем плане, процесс просмотра возобновляется).

То же самое происходит, когда устройство заблокировано. Процесс просмотра останавливается, пока пользователь не разблокирует его, и веб-приложение находится на переднем плане.

4
задан Evan Teran 5 October 2009 в 05:41
поделиться

3 ответа

Один из вариантов, который, безусловно, будет работать, - это заменить Int* на shared_ptr<Int>, а затем реализовать operator< для shared_ptr<Int>

bool operator<(const shared_ptr<Int> a, const shared_ptr<Int> b)
{
    return a->getVal() < b->getVal();
}
3
ответ дан Andriy Tylychko 19 August 2018 в 17:24
поделиться
  • 1
    Я пытаюсь использовать этот подход прямо сейчас ... вместо использования shared_ptr просто используя базовый класс-оболочку. – Polaris878 5 October 2009 в 02:35
  • 2
    Я принял это, потому что я в основном использую ту же идею ... – Polaris878 5 October 2009 в 02:52
  • 3
    @ Polaris878 Хотя общие указатели здесь неактуальны. Вы никогда не говорили, что хотите получить совместное владение. – juanchopanza 22 February 2016 в 22:53

Вы можете явно указать, какой компаратор должен использовать вашу очередь.

#include <iostream>
#include <sstream>
#include <functional>
#include <vector>
#include <queue>

class Int {
public:
    Int(int val) : m_val(val) {}
    int getVal() { return m_val; }
    bool operator<(const Int &other) const { return m_val < other.m_val; }
private:
    int m_val;
};

template<typename Type, typename Compare = std::less<Type> >
struct pless : public std::binary_function<Type *, Type *, bool> {
    bool operator()(const Type *x, const Type *y) const
        { return Compare()(*x, *y); }
};

int main(int argc, char *argv[]) {
    std::priority_queue<Int*, std::vector<Int*>, pless<Int> > myQ;

    for (int i = 1; i < argc; i++) {
        std::stringstream ss(argv[i]);
        int x;
        ss >> x;
        myQ.push(new Int(x));
    }

    for (; !myQ.empty(); delete myQ.top(), myQ.pop())
        std::cout << myQ.top()->getVal() << std::endl;

    return 0;
}
10
ответ дан ephemient 19 August 2018 в 17:24
поделиться

Целое число того же размера, что и указатель на 32-битных системах. В 64-битных системах указатель будет в два раза больше. Следовательно, проще / быстрее / лучше использовать обычные целые числа.

0
ответ дан thekidder 19 August 2018 в 17:24
поделиться
  • 1
    Int - это просто место для гораздо большего класса. – Polaris878 5 October 2009 в 02:12
  • 2
    в этом случае игнорировать этот ответ. – thekidder 5 October 2009 в 02:50
Другие вопросы по тегам:

Похожие вопросы: