提问人:anas16 提问时间:8/11/2021 最后编辑:JeJoanas16 更新时间:8/11/2021 访问量:1103
使用数组在映射中插入 - 错误:无法将类型为“int&&”的右值引用绑定到类型为“int”的左值 [duplicate]
Insertion in map using array - error: cannot bind rvalue reference of type ‘int&&’ to lvalue of type ‘int’ [duplicate]
问:
我想通过以下代码在(命名)中插入两个数组的值: and :A
T
std::unordered_map
unordered
for(int i = 0; i < N; ++i)
{
unordered.insert(std::make_pair<int, int>(A[i], T[i]));
}
我收到以下错误:
错误:无法将类型为“int&&”的右值引用绑定到类型为“int”的左值
我想这是因为返回对变量的引用,但是否则该怎么做呢?operator[]
这是我的其余代码:
int N;
cin >> N;
int A[N], T[N];
std::unordered_map<int, int> unordered;
for (int i = 0; i < N; ++i)
{
cin >> A[i];
}
for (int i = 0; i < N; ++i)
{
cin >> T[i];
}
for (int i = 0; i < N; ++i)
{
unordered.insert(std::make_pair<int, int>(A[i], T[i]));
}
答:
1赞
JeJo
8/11/2021
#1
否则怎么办?
您显式提供了模板参数,以使编译器强制选择以下 std::make_pair
的重载std::make_pair
template< class T1, class T2 >
std::pair<V1,V2> make_pair( T1&& t, T2&& u );
这不是必需的,让编译器做推导
unordered.insert(std::make_pair(A[i], T[i]));
或
unordered.insert({A[i], T[i]});
或使用 std::unordered_map::emplace
unordered.emplace(A[i], T[i]);
请注意,和 是可变长度数组,它们不是标准 c++ 的一部分。更多阅读:为什么可变长度数组不是 C++ 标准的一部分?代替 VLA。A
T
std::vector
话虽如此,你真的需要将用户输入存储在数组之间吗?您也可以在旅途中直接将键值插入到地图中,如下所示:
#include <iostream>
#include <unordered_map>
int main()
{
int N; std::cin >> N;
std::unordered_map<int, int> unordered;
for (auto i = 0u; i < N; ++i)
{
int key{}, value{};
std::cin >> key >> value; // get the user input (key and value)
unordered.emplace(key, value); // like this
// or
// unordered.insert(std::make_pair(key, value));
// or
// unordered.insert({ key, value });
}
}
0赞
Pavan Chandaka
8/11/2021
#2
在认知上,您可以按如下所示使用。std::move
unordered.insert(std::make_pair<int, int>(std::move(A[i]),std::move( T[i])));
评论
std::make_pair
unordered.insert({A[i], T[i]});
{}
unordered.insert(std::make_pair<int, int>(A[i], T[i]));
unordered.insert(std::make_pair(A[i], T[i]));
int N; cin >> N; int A[N], T[N];
std::vector