Подтвердить что ты не робот

Как обрабатывать std:: pair как две отдельные переменные?

В стандартной библиотеке есть несколько функций, таких как std::map::insert, которые возвращают std::pair. Время от времени было бы удобно, чтобы это заполнило две разные переменные, соответствующие половинам пары. Есть ли простой способ сделать это?

std::map<int,int>::iterator it;
bool b;
magic(it, b) = mymap.insert(std::make_pair(42, 1));

Я ищу здесь magic.

4b9b3361

Ответ 1

std::tie из заголовка <tuple> - это то, что вы хотите.

std::tie(it, b) = mymap.insert(std::make_pair(42, 1));

"magic":)

Примечание. Это функция С++ 11.

Ответ 2

В С++ 03 вы должны написать вот так:

std::pair< map<int, int>::iterator, bool > res = mymap.insert(std::make_pair(42, 1));

Ответ 3

В С++ 17 вы можете использовать структурированные привязки. Поэтому вам не нужно сначала объявлять переменные:

auto [it, b] = mymap.insert(std::make_pair(42, 1));