c++ с использованием структур в качестве данных для ‹map, ‹map, vector››

У меня возникла проблема с загрузкой карты с другой комбинацией карты/вектора в качестве значения со структурами. Ниже приведен мой код, который я попытался максимально упростить:

    //These are the structs
    struct Order 
    {
        std::string A;
        std::string B;
    };

    struct Card
    {
        std::string C;
        std::string D;
    };

    struct Item  
    {
        std::string E;
        std::string F;
    };

    //this is the method that will read and load the map
    void LoadMap(ListofValues object)
    {
    std::map<Order, std::map<Item, std::vector<Card>>> records; //THIS is the data structure I'm trying to store into

    //ListofValues is a list passed that holds all these values that will need to be put into my map
    for(std::vector<ListofValues>::iterator vIter= object.begin(); vIter != object.end(); ++vIter)
            {           
                std::string sReceiptRecord = (*vIter).getReceipt(m_StdOrderConfirmVer);

                Order order = {(*vIter).getA,(*vIter).getB}; 
                Item item = {(*vIter).getC,(*vIter).getD}; 
                Card card = {wws::String((*vIter).getE), (*vIter).getF}; 

                records[order][item].push_back(card); //load into my map            
            }
      }

Поэтому мне будет передан объект, содержащий список всех значений (ListofValues). Я пройдусь по этому списку и с помощью методов получения сохраню эти значения в структурах (getE возвращает Long, поэтому преобразование было необходимо). Есть ли шаг, который я пропускаю

Ошибка, которую я получаю:

error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const Order' (or there is no acceptable conversion)

person Saif    schedule 21.04.2016    source источник
comment
Опубликуйте минимально воспроизводимый пример. У вас ошибка компилятора, и если бы я взял ваш код как есть, у меня была бы их куча.   -  person PaulMcKenzie    schedule 21.04.2016
comment
Я думаю, вам нужен оператор ‹() для вашего класса Order.   -  person 2785528    schedule 21.04.2016
comment
Не уверен, как он получает заявленную ошибку - он вызывает .begin() и .end() для TYPE переменной, которую он передал. Действительно нужен MCVE   -  person xaxxon    schedule 21.04.2016
comment
@OP Видите это? Та же ошибка, и пример завершен. Все ошибки C++ можно воссоздать на простом примере, и вам нужно было разбить свой код, чтобы выяснить, что вызывает проблему, вместо того, чтобы иметь векторы, String, итераторы и т. д.   -  person PaulMcKenzie    schedule 21.04.2016
comment
Извините все, я запутался, пытаясь перевести конкретный код в более краткий, общий код. Мне пришлось вычеркнуть около сотни строк, чтобы получить нужные части.   -  person Saif    schedule 21.04.2016


Ответы (2)


Вам необходимо указать оператор ‹, чтобы ваша структура использовалась в качестве ключа для карты, см. этот вопрос: Структура как ключ в std::map

person rickyviking    schedule 21.04.2016

ListOfValues — это ТИП параметра, переданного в LoadMap, object — фактическая переменная.

В вашем цикле for вам нужно сказать object.begin() и object.end().

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

Вот что я вижу: https://godbolt.org/g/xl4zWw

person xaxxon    schedule 21.04.2016