unordered_map::插入与运算符 []= 函数给出错误
unordered_map::insert vs operator []= function giving error
我正在将记录插入到无序列图中,这会导致错误,下面是程序:
#include<tr1/unordered_map>
using namespace std;
int main(int argc, char *argv[])
{
std::tr1::unordered_map<int, int> u1;
int n;
cout << "Enter the no. of times" << endl;
cin >> n;
for (int i = 0; i<n; i++)
{
int no_items;
cout << "Enter no of items" << endl;
cin >> no_items;
for (int j = 0; j<no_items; j++)
{
int key, val;
cout << "key=";
cin >> key;
cout << endl << "val=";
cin >> val;
u1.insert(std::make_pair<int, int>(key, val)); //Compiler error
//u1[key]=val; //This line is working instead of insert.
}
}
return 0;
}
u1.insert(std::make_pair<int,int>(key,val));
给出错误
- 无法将"键"(键入"int"(转换为类型"int&&">
- 调用 'make_pair(int&, int&(' 没有匹配函数
想知道将记录插入unordered_map
operator []
如何工作,insert()
不起作用。
std::make_pair
的 2 个参数是转发引用T&&
。只需让编译器进行类型推断:
u1.insert(std::make_pair(key,val));
u1.insert(std::make_pair<int,int>(key,val));
如果在没有 -std=c++11 的情况下调用 g++,则有效
但是对于 C++11,我们需要给出 as ...
u1.insert(std::make_pair(key,val));
因为早期版本的make_pair
template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y)
{
return ( pair<T1,T2>(x,y) );
}
但从 C++11 开始,签名是
template <class T1, class T2>
pair<V1,V2> make_pair (T1&& x, T2&& y);
我什至建议做 emplace - 以节省创建临时的时间。看看这个:
u1.emplace(key, val);
相关文章:
- 类中私有结构的构造函数出错
- 字符串验证函数出错
- 我的类默认构造函数出错
- Dev-C++和Code::Blocks中的析构函数出错
- int对的哈希函数出错
- MSVC 编译器错误导致迭代器和友元函数出错
- 复制构造函数出错
- 使用 WinSock2 开发,使用 CreateThread() 函数出错
- 链接列表的Push_back函数出错
- 结构初始化中的隐式复制构造函数出错
- 异步函数出错
- 编译器错误消息错误:令牌之前的预期')' '*'。我的构造函数出错
- c++中使用std::bind和std::函数出错
- 在vector排序中使用c++模板函数出错
- 使用std::for_each lambda函数出错
- 二叉搜索树插入函数出错
- 调用类的函数出错
- c++使用删除函数出错
- 使用已删除的函数出错
- 调用构造函数出错