Я пытаюсь понять назначение unordered_map
, я получаю следующую ошибку: нет соответствующей функции для вызова std::pair<foo, foo>::pair()
, в соответствии с do c для unordered_map operator[]
:
Если k не соответствует ключу какого-либо элемента в контейнере, функция вставляет новый элемент с этим ключом и возвращает ссылку на его сопоставленное значение.
Поэтому я пытаюсь назначить объект (от make_pair
) до этой ссылки, которая, как я предполагаю, не допускается. Однако с pair<int,int>
это работает, и мне интересно, должен ли я объявить некоторые другие операторы для foo
, чтобы это работало.
#include <bits/stdc++.h>
using namespace std;
struct foo {
int n;
foo(int n): n(n) {};
};
int main(){
unordered_map<int, pair<foo,foo>> m;
//m[3] = make_pair(foo(1),foo(2)); <--- error here
unordered_map<int, pair<int,int>> ii;
ii[3] = make_pair(1,2);
}