Сортировка пользовательского класса в QVector

253
10 марта 2018, 19:36

Как сделать сортировку вектора моего класса QVector <DbTrade>?

Вот код:

dbtrade.h:

#ifndef DBTRADE_H
#define DBTRADE_H

class DbTrade
{
public:
    DbTrade();
    DbTrade(int tradenum, int dateTime, int price, int qty, int buysell, int openInterest);
    int getTradenum();
    int getDateTime();
    int getPrice();
    int getQty();
    int getBuysell();
    int getOpenInterest();
    void setTradenum(int tradenum);
    void setDateTime(int dateTime);
    void setPrice(int price);
    void setQty(int qty);
    void setBuysell(int buysell);
    void setOpenInterest(int openInterest);

private:
    int tradenum;
    int dateTime;
    int price;
    int qty;
    int buysell;
    int openInterest;
};
#endif // DBTRADE_H
#endif // DBTRADE_H

dbtrade.cpp:

#include "dbtrade.h"
DbTrade::DbTrade()
{
    tradenum = 0;
    dateTime = 0;
    price = 0;
    qty = 0;
    buysell = 0;
    openInterest = 0;
}
DbTrade::DbTrade(int tradenum, int dateTime, int price, int qty, int buysell, int openInterest)
{
    this->tradenum = tradenum;
    this->dateTime = dateTime;
    this->price = price;
    this->qty = qty;
    this->buysell = buysell;
    this->openInterest = openInterest;
}
int DbTrade::getTradenum()
{
    return tradenum;
}
int DbTrade::getDateTime()
{
    return dateTime;
}
int DbTrade::getPrice()
{
    return price;
}
int DbTrade::getQty()
{
    return qty;
}
int DbTrade::getBuysell()
{
    return buysell;
}
int DbTrade::getOpenInterest()
{
    return openInterest;
}
void DbTrade::setTradenum(int tradenum)
{
    this->tradenum = tradenum;
}
void DbTrade::setDateTime(int dateTime)
{
    this->dateTime = dateTime;
}
void DbTrade::setPrice(int price)
{
    this->price = price;
}
void DbTrade::setQty(int qty)
{
    this->qty = qty;
}
void DbTrade::setBuysell(int buysell)
{
    this->buysell = buysell;
}
void DbTrade::setOpenInterest(int openInterest)
{
    this->openInterest = openInterest;
}

Далее, я в другом классе инициализирую вектор:

QVector <DbTrade> tradeVector;

и заполоняю его.

Но как его отсортировать по элементу price?

Answer 1

Воспользуйтесь стандартным алгоритмом:

std::sort (myvector.begin(), myvector.end(), [](const DbTrade& lha, const DbTrade& rha){
    return lha.getPrice() < rha.getPrice();
});

Только для этого вам понадобится конструктор копирования. Возможно, стоит хранить вектор указателей на DbTrade, чтобы не копировать лишний раз. Или еще лучше: QVector<std::unique_ptr<DbTrade>> - тогда не нужно заботиться об управлении памятью.

READ ALSO
Зависает чтение InputStream

Зависает чтение InputStream

Пытаюсь прочитать длинный InputStream (с ~180к+ символов) Этим способом зависает в while:

211
Динамическое создание массивов

Динамическое создание массивов

Написал функции для создания и инициализации одномерного массива и матрицыКак в main вывести оба массива в консоль?

229
recursive fill sudoku java

recursive fill sudoku java

getSupposedNums(i,j) возвращает массив возможных вариантов для ячейки i,j, работает корректно

229
Spring security ошибка при авторизации (403)

Spring security ошибка при авторизации (403)

Пробую сделать произвольный AuthenticationProviderПока просто поставил println, чтобы он высвечивал данные о пользователе, если в него система обратится

217