如何解决使用具有多个值的unordered_map移动插入
我尝试了下面的代码来插入移动和初始化列表。后者可以工作,但不能移动。有人可以在这里为我提供正确的解决方案吗?
#include <iostream>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main ()
{
std::unordered_map<std::string,std::pair<double,double>>
myrecipe;
myrecipe.insert (std::make_pair<std::string,std::make_pair<double,double>>("eggs",(1.0,6.0)));
myrecipe.insert ( {{"sugar",{0.8,1.0}},{"salt",{0.1,2.0}}} );
std::cout << "myrecipe contains:" << std::endl;
for (auto& x: myrecipe)
std::cout << x.first << ": " << x.second.first << ":" << x.second.second << std::endl;
std::cout << std::endl;
return 0;
}
解决方法
此行有一些问题:
myrecipe.insert (std::make_pair<std::string,std::make_pair<double,double>>("eggs",(1.0,6.0)));
您要插入的类型是std::pair<std::string,std::pair<double,double>>
,但这不是您在此处所做的。这是使其与make_pair
一起工作的方式:
myrecipe.insert(std::make_pair<std::string,double>(1.0,6.0)));
或者采用更具可读性的格式,它依赖于模板参数类型推导:
myrecipe.insert(std::make_pair("butter",std::make_pair(2.0,3.0)));
Godbolt link,so you can see it work.
,您需要在双打中配对,而不是完整插入:
myrecipe.insert(("eggs",6.0)));
要澄清:<std::string,double>>
不是std::pair
,它是一个键值对(很简单!)。
相反,您的std::pair<double,double>
是一个“真实的” std::pair
(或者有人可以说一个2元组),可以在C ++中用作std::pair
。因此,您需要std::make_pair_call
如果您将该行更改为myrecipe.insert ({"eggs",{1.0,6.0}});
,它应该可以正常工作
此外,std::make_pair<double,double>
不应作为模板参数出现,因为它不是类型而是返回对象的函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。