将结构添加到地图c ++

时间:2016-04-06 22:46:30

标签: c++ vector struct maps

我在向地图添加两个结构时遇到一些问题,其中值是矢量。

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);
            }
       }

当我尝试使用&#39; records.insert()&#39;任何一对&#39;或者&#39; make_pair&#39;功能,它给了我这个我不太懂的错误。 &#39; if-statment&#39;中的注释行似乎工作但我不确定这是否是将新条目插入地图的正确方法。下面是两个结构的代码,如果有帮助的话。

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

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

3 个答案:

答案 0 :(得分:1)

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

public IEnumerable<Tuple<string, string>> ListAllCoursesWithArea() { List<Tuple<string,string>> final = new List<Tuple<string, string>>(); Tuple<string, string> tmp; var books = ( from temp in bookListLoader.LoadList() group temp by new { temp.CourseCode } into g select g.First() ).ToList(); foreach (BookListRecord i in books) { tmp = new Tuple<string, string>(i.CourseCode, i.Area); final.Add(tmp); } return final; } 容器将密钥类型public IEnumerable<Tuple<string, string>> ListAllCoursesWithArea() { var books = ( from temp in bookListLoader.LoadList() group temp by new { temp.CourseCode } into g select g.First().(new Tuple<g.CourseCode,g.Area>()) ).ToList(); return books; } 映射到值类型records。但是您的插入行正在尝试添加一个Orders而不是std::vector<Items>

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

Items

更现代的方法是使用std::vector<Items>代替records.insert( std::make_pair( order, std::vector<Items>( 1, item ) ) );

当然,在您的情况下,此搜索仍然是多余的。如果不存在,使用地图emplace将创建新条目。所以你的整个if-else块可以浓缩为:

insert

答案 1 :(得分:0)

您正试图将Orders - Items对插入std::map Orders - std::vector<Items> records.insert(std::make_pair(order, std::vector<Items>(item)); 。试试这个:

item

或者将std::vector<Items> temp存储在临时records.insert(std::make_pair(order, temp); 中,然后执行,

#include <AL/al.h>
#include <AL/alc.h>

答案 2 :(得分:0)

问题在于您将另一种对传递给地图。地图接受货币对<Order, vector<Item>>。但是,您发送的是<Order, Item>类型。

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