C++: вектор <pair <vector <int>,int> >

Это то, что я хочу сделать...

vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);

Где x - размер вектора var_name, а y - размер вектора внутри пары.

Вышеприведенный оператор не работает, потому что шаблон пары допускает только константы. Как я могу получить оба моих вектора в размерах x и y соответственно?

4 ответа

Решение
vector<pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 0));

Упростите это как:

pair<vector<int>,int> value(vector<int>(y), 0);
vector<pair<vector<int>,int> > var_name(x, value);

Если вам нравится ваш собственный синтаксис, то вы должны делать это:

vector<pair<vector<int>,int> > var_name(x, std::make_pair(vector<int>(y), 0));

Ты можешь использовать make_pair от <utility> построить пару, которую вы хотите инициализировать vector с. Например:

vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))

или позвоните pair<vector<int>,int> конструктор напрямую (как кажется, вы пытаетесь):

vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))

pair<vector<int>,int> это имя типа. Для инициализации вам нужно значение.

Вы получаете значение, вызывая конструктор типа (так же, как вы делаете для верхнего уровня оператора var_name). Так как это создает значение в строке в выражении, а не инициализирует переменную, имени переменной нет, и мы просто пишем что-то вроде pair<vector<int>,int>(...), ... аргументы для конструктора (положить (y) где-нибудь внутри угловых скобок нелогично). В нашем случае мы хотим, чтобы первое значение было вектором длины y, а второе значение было... 0, я полагаю.

Итак, мы получаем pair<vector<int>,int>(vector<int>(y), 0), Это довольно громоздко, поэтому стандартная библиотека предоставляет функцию шаблона std::make_pair, Он обходит тот факт, что аргументы шаблона не могут быть выведены для конструкторов, используя свободную функцию (которая может делать вывод с аргументами шаблона) для вызова конструктора.

Таким образом, вышесказанное сокращает до make_pair(vector<int>(y), 0), который, когда подставляется в остальную часть строки, дает ответ Бенджамина Линдли.

Другие вопросы по тегам