MySQL должен сделать преобразование, чтобы сделать сравнение betwen двух разных типов. Он пытается превратить строку в int и получить цифры из строки, начиная с начала.
У вас было, например,
'ABC12'
результат преобразования строки в int будет 0
1. Вы могли сделать функтор и std::for_each
:
struct F {
F(std::vector<std::pair<bool,int> > &b) : m_b(b){
}
void operator()(int x) {
m_b.push_back(std::make_pair(false, x));
}
std::vector<std::pair<bool,int> > &m_b;
};
std::for_each(a.begin(), a.end(), F(b));
, Хотя это может оказаться большей проблемой, чем, он стоит. Но по крайней мере это было бы допускающим повторное использование :).
, Возможно, существует что-то, что могло быть сделано с boost::bind
.
2. РЕДАКТИРОВАНИЕ: Я думал, что Вы смогли использовать, связывают с задней вставкой и преобразовывают. что-то вроде этого:
std::transform(a.begin(), a.end(), std::back_inserter(b), boost::bind(std::make_pair<bool, int>, false, _1));
я попробовал это std::bind1st
, я думал, что это должно было работать, но я мог только заставить это успешно выполняться с boost::bind
. Я буду продолжать пробовать...
3. РЕДАКТИРОВАНИЕ: вот решение неповышения:
std::transform(a.begin(), a.end(), std::back_inserter(b), std::bind1st(std::ptr_fun(std::make_pair<bool, int>), false));
4. РЕДАКТИРОВАНИЕ: вот является C++ 11 решениями (который является моим текущим фаворитом):
std::for_each(begin(a), end(a), [&b](int v) {
b.push_back(std::make_pair(false, v));
});
или еще более простой:
for(int v : a) {
b.push_back(std::make_pair(false, v));
}