unordered_map::插入与运算符 []= 函数给出错误

unordered_map::insert vs operator []= function giving error

本文关键字:函数 出错 错误 运算符 map 插入 unordered      更新时间:2023-10-16

我正在将记录插入到无序列图中,这会导致错误,下面是程序:

#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);