C++ set‹T› Какое решение является наиболее подходящим?

Я не мог использовать Class или Struct, используя набор С++. Я искал в Интернете и stackoverflow, но не смог найти образец. Классически кажется невозможным найти образцы, отличные от образцов int и string, в результате моих вызовов. Я хочу, чтобы друг помог.

Спасибо друзьям, кто откликнется.

using namespace std;

struct DemoData
{
    int             id;
    string          Pairs;
    double          Price;

};

int main()
{
    DemoData myDemoDara  ;
    myDemoDara.id = 1; myDemoDara.Pairs = "GBPJPY"; myDemoDara.Price = 9.34;
    set<DemoData> setVeri  ;    //**It gives errors during compilation.**

    setVeri.insert(listem);

    return 0; 
}

person Umit Terzi    schedule 22.01.2020    source источник
comment
Спрашивая об ошибках сборки, всегда копируйте и вставляйте (в виде текста!) полный вывод ошибок компилятора в сам вопрос.   -  person Some programmer dude    schedule 22.01.2020
comment
Что касается моей догадки, проблема заключается в том, что у вас нет функции operator< для вашей структуры. std::set упорядочен (т.е. элементы отсортированы) , и вам нужен оператор сравнения "меньше" (operator< перегрузка) для сравнения структур для упорядочивания.   -  person Some programmer dude    schedule 22.01.2020


Ответы (1)


Вам нужно будет предоставить пользовательский operator < для вашей структуры DemoData

struct DemoData
{
    int             id;
    string          Pairs;
    double          Price;
    bool operator < (const DemoData& other) const {
     return std::tie(   id, Pairs, Price) < 
            std::tie(   other.id, other.Pairs, other.Price) ;
    }
};
person P0W    schedule 22.01.2020
comment
Какова логика работы этого раздела? логический оператор ‹ (const DemoData& other) const { return std::tie(id, Pairs, Price) ‹ std::tie(other.id, other.Pairs, other.Price) ; } - person Umit Terzi; 22.01.2020
comment
@UmitTerzi std::set<T> содержит отсортированный набор уникальных объектов типа T. std::set<T> будет использовать std::less<T> для сравнения DemoData, std::less<T> использует operator<, поэтому ваш класс должен предоставить этот оператор, поскольку он не делает прямого вывода о том, как вы хотите сравнить два этих объекта DemoData и вставить в std::set. std::tie упрощает жизнь, обеспечивая слабый порядок. Вы можете выполнить поиск по std::set здесь - person P0W; 22.01.2020
comment
Спасибо за подробности. Несмотря на то, что я так много читал, я не понимал, что написано на других сайтах. - person Umit Terzi; 22.01.2020