Получить значение из std::pair без пользовательского функтора в C++03

530
05 февраля 2017, 12:52

Имеется код, который работает в C++11:

#include <algorithm>
#include <iostream>
#include <vector>
#include <utility>
#include <iterator>
typedef std::pair<void*, int> pair;
int main(){
    std::vector<pair> s;
    std::vector<int> r;
    pair p1(NULL, 42);
    pair p2(NULL, 100500);
    s.push_back(p1);
    s.push_back(p2);    
    std::transform(s.begin(), s.end(), std::back_inserter(r), static_cast<const int&(*)(const pair&)>(std::get<1>));
    std::copy(r.begin(), r.end(), std::ostream_iterator<int>(std::cout, " "));
}

Вывод:

42 100500 

Хочется реализовать подобное в C++03 без использования пользовательского функтора/функции типа:

struct F {
    int operator()(const pair& p) { return p.second; }
};

или

int f(const pair& p) { return p.second; }

и вызова вида:

std::transform(s.begin(), s.end(), std::back_inserter(r), F());

Можно ли это сделать с помощью цепочки готовых библиотечных адаптеров? std::get в C++03 ещё не было.

Использовать ручной цикл for вместо transform также не хочется, т.к. это влечёт за собой упоминание типов итераторов, да и не для того алгоритмы придуманы, чтобы вручную циклы писать.

Answer 1

Международное сообщество SO говорит, что нет стандартных функций для получения first и second членов std::pair в С++03. Как следствие, нет возможности и решить поставленную задачу. Всем спасибо за участие :)

Answer 2
#include <algorithm>
#include <iostream>
#include <vector>
#include <utility>
#include <iterator>
typedef std::pair<void*, int> pair;
struct F {
    int operator()(const pair& p) { return p.second; }
};
int main(){
    std::vector<pair> s;
    std::vector<int> r;
    pair p1 = std::make_pair<void*, int>(NULL, 42);
    pair p2 = std::make_pair<void*, int>(0, 100500);
    s.push_back(p1);
    s.push_back(p2);
    std::transform(s.begin(), s.end(), std::back_inserter(r), F());
    std::copy(r.begin(), r.end(), std::ostream_iterator<int>(std::cout, " "));
}

Компилятор MSVC 2010

Вывод:

42 100500
READ ALSO
Русский язык в JSON

Русский язык в JSON

Вычитал из этой статьи, что есть парсер JSONУдобный парсер, но при вводе значений на русском языке выводится ошибка

1203
Как реализовать данный запрос

Как реализовать данный запрос

На въюхе у меня должно быть два цикла: один выводит все категории, второй, который находится внутри первого, выводит все бренды данной категорииПример:

477
Запись в массивы

Запись в массивы

Народ подскажите решениеЕсть пользователь который с консоли вводит числа эти числа переводятся в другую систему координат и их надо записать...

521