将结构添加到映射 C++

adding structs to a map c++

我在将两个结构添加到值是向量的映射时遇到了一些问题。

std::map<Orders, std::vector<Items>> records;

        for(std::vector<StdCardConfirmationReceipt>::iterator vIter= mvCardConfirmationReceiptList.begin(); vIter != mvCardConfirmationReceiptList.end(); ++vIter)
        {

            Orders order = {(*vIter).getOrderIdOrderCentral,(*vIter).getFulfillmentOrderIdOrderCentral};
            Items item = {(*vIter).getItemIdOrderCentral,(*vIter).getLineItemIdOrderCentral, (*vIter).getItemFulfillmentStatusOrderCentral, (*vIter).getFulfillmentExceptionOrderCentral};

            if (records.find(order) == records.end())
            {
                records.insert(std::make_pair(order,item));
                //records[order];
                //records[order].push_back(item);
            }
            else
            {
                records[order].push_back(item);
            }
       }

当我尝试将 'records.insert()' 与 'pair' 或 'make_pair' 函数一起使用时,它给了我这个我不太明白的错误。 'if-statment' 中的注释行似乎有效,但我不确定这是否是将新条目插入地图的正确方法。下面是这两个结构的代码,如果有帮助的话。

struct Orders
{
    std::string sId;
    std::string sFulfillmentOrderId;
};

struct Items
{
    std::string sId;
    std::string sLineItemId;
    std::string sFulfillmentStatus;
    std::string sFulfillmentException;
};

您正在尝试将 Orders-Items 对插入到 Orders-std::vector<Items>std::map 中。试试这个:

records.insert(std::make_pair(order, std::vector<Items>(item));

或者将 item 存储在一个临时的 std::vector<Items> temp 中然后执行,

records.insert(std::make_pair(order, temp);

虽然如果您确实 包含错误消息 会有所帮助,但在这种情况下很容易看出您试图在地图中插入错误的类型。

records 容器将键类型 Orders 映射到值类型 std::vector<Items>。但是您的插入行试图添加一个 Items 而不是 std::vector<Items>.

您应该创建一个包含该项目的向量。有几种方法可以做到这一点。最简单的是:

records.insert( std::make_pair( order, std::vector<Items>( 1, item ) ) );

更现代的方法是使用 emplace 而不是 insert

当然,在您的情况下,此搜索无论如何都是多余的。如果不存在,使用映射 operator[] 将创建一个新条目。所以你的整个 if-else 块可以压缩为:

records[order].push_back( item );

问题是您将不同类型的对传递给地图。地图接受对类型<Order, vector<Item>>。但是,您发送的类型是 <Order, Item>.

您必须更改所需地图的类型或要插入的地图类型。