移动具有多个值的 unordered_map 的插入
Move insertion with unordered_map having multiple values
我尝试了以下代码来插入移动和初始化列表。后者有效但移动插入无效。有人可以帮我找到正确的解决方案吗?
#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(("eggs",std::make_pair<double,double>(1.0,6.0)));
澄清一下:
<std::string,std::pair<double, double>>
不是 std::pair
,而是 key-value 对(原文如此!)。
您的 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>
不应作为模板参数出现,因为它不是类型,而是 returns 对象的函数。
这条线有几个问题:
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, std::pair<double, double>>("eggs", std::make_pair<double, double>(1.0, 6.0)));
或者以更易读的格式,依赖于模板参数类型推导:
myrecipe.insert(std::make_pair("butter", std::make_pair(2.0, 3.0)));
我尝试了以下代码来插入移动和初始化列表。后者有效但移动插入无效。有人可以帮我找到正确的解决方案吗?
#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(("eggs",std::make_pair<double,double>(1.0,6.0)));
澄清一下:
<std::string,std::pair<double, double>>
不是 std::pair
,而是 key-value 对(原文如此!)。
您的 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>
不应作为模板参数出现,因为它不是类型,而是 returns 对象的函数。
这条线有几个问题:
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, std::pair<double, double>>("eggs", std::make_pair<double, double>(1.0, 6.0)));
或者以更易读的格式,依赖于模板参数类型推导:
myrecipe.insert(std::make_pair("butter", std::make_pair(2.0, 3.0)));