向映射c++添加structs
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语句"中的注释行似乎有效,但我不确定这是否是在映射中插入新条目的正确方式。如果有帮助的话,下面是这两个结构的代码。
struct Orders
{
std::string sId;
std::string sFulfillmentOrderId;
};
struct Items
{
std::string sId;
std::string sLineItemId;
std::string sFulfillmentStatus;
std::string sFulfillmentException;
};
虽然如果您真的包含错误消息会有所帮助,但在这种情况下,很容易看出您试图在映射中插入错误的类型。
CCD_ 1容器将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 );
您正试图将Orders
-records
0对插入到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);
问题是您正在向映射传递不同类型的对。映射接受类型为<Order, vector<Item>>
的对。但是,您发送的是类型<Order, Item>
。
你必须改变你想要的地图类型,或者你要插入的东西的类型。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 向映射c++添加structs