Использование оператора присваивания с методом make_pair генерирует предупреждение CLion - PullRequest
0 голосов
/ 08 мая 2018

В моей программе есть массив пар, объявленных следующим образом:

pair <string, int> mostOftenPairs[10];

Когда я хочу, например, инициализировать его:

for (short i = 0; i < 10; ++i)
    mostOftenPairs[i] = make_pair(std::string(), 0);

CLion подчеркивает строку, где происходит назначение, и когда я нахожу на него указатель, я получаю эту ошибку:

'pair::operator=(type)' is deleted

Тем не менее, программа работает без проблем, но у меня вопрос: есть ли какой-нибудь метод, используемый для присвоения значений парам вместо '='? Можно ли инициализировать массив пар в одной строке? Я имею в виду нечто похожее на это:

pair <string, int> mostOftenPairs[10] = make_pair(std::string(), 0);

1 Ответ

0 голосов
/ 08 мая 2018

Можно ли инициализировать массив пар в одной строке? Я имею в виду нечто похожее на это:

Для их инициализации по умолчанию вам не нужно ничего делать, как указано в документации для std::pair constructor

1) Конструктор по умолчанию. Значение-инициализирует оба элемента пары , первый и второй.

(выделение мое), поэтому конструктор по умолчанию std::pair уже инициализируется (пустая строка и 0 для int), если вам не нужно значение по умолчанию, используйте std::vector:

std::vector<std::pair<std::string,int>> mostOftenPairs( 10, std::make_pair( std::string(), 1 ) );
...