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)
, который, когда подставляется в остальную часть строки, дает ответ Бенджамина Линдли.