C ++: vetor , int>>
Pergunta
É isso que pretendo fazer ...
vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);
Onde x é o tamanho do vetor var_name ey é o tamanho do vetor dentro do par.
A instrução acima não funciona porque o modelo de par permite apenas constantes.Como posso fazer com que meus dois vetores tenham o tamanho de xey, respectivamente?
Solução
vector<pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 0));
Outras dicas
Simplifique como:
pair<vector<int>,int> value(vector<int>(y), 0);
vector<pair<vector<int>,int> > var_name(x, value);
Se você gosta da sua própria sintaxe, deve fazer o seguinte:
vector<pair<vector<int>,int> > var_name(x, std::make_pair(vector<int>(y), 0));
Você pode usar make_pair
de <utility>
para construir o par com o qual deseja inicializar seu vector
.Por exemplo:
vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))
ou chame o construtor pair<vector<int>,int>
diretamente (como parece que você está tentando):
vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))
pair<vector<int>,int>
é o nome de um tipo. Para a inicialização, você precisa de um valor.
Você obtém um valor chamando o construtor do tipo (da mesma forma que, no nível superior da instrução, você está fazendo para var_name
). Como isso é criar um valor in-line em uma expressão, em vez de inicializar uma variável, não há nome de variável e apenas escrevemos algo como pair<vector<int>,int>(...)
. O ...
são os argumentos para o construtor (colocar (y)
em qualquer lugar dentro dos colchetes angulares é ilógico). Em nosso caso, queremos que o primeiro valor seja um vetor de comprimento y e o segundo valor seja ... 0, suponho.
Então, obtemos pair<vector<int>,int>(vector<int>(y), 0)
. Isso é um tanto pesado, e é por isso que a biblioteca padrão fornece a função de modelo std::make_pair
. Ele contorna o fato de que os argumentos de modelo não podem ser inferidos para construtores, usando uma função livre (que pode fazer inferência com argumentos de modelo) para chamar o construtor.
Assim, o acima é reduzido para make_pair(vector<int>(y), 0)
, que, quando substituído no resto da linha, fornece a resposta de Benjamin Lindley.