Re: std::sort и bind
От: Alexander G Украина  
Дата: 19.11.08 13:26
Оценка: 29 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте есть такой код

А>
А>        std::vector< sValue > m_stdVector;
А>    m_stdVector.push_back(sValue(2));
А>    m_stdVector.push_back(sValue(1));
А>    std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1));
А>


А>При выполнении получаю DEBUG_ERROO


А>
А>_DEBUG_ERROR2("invalid operator<", _Where, _Line);
А>


А>Не подскажите в чем проблема


Надо так

std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1) < boost::bind(&sValue::iA,_2));


Ошибка потому что в boost::bind(&sValue::iA,_1) и предикат(a, b) и предикат(b, a) может быть true, что нарушает Strict Weak Ordering.
Русский военный корабль идёт ко дну!
std::sort и bind
От: Аноним  
Дата: 18.11.08 11:49
Оценка:
Здравствуйте есть такой код
        std::vector< sValue > m_stdVector;
    m_stdVector.push_back(sValue(2));
    m_stdVector.push_back(sValue(1));
    std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1));


При выполнении получаю DEBUG_ERROO

_DEBUG_ERROR2("invalid operator<", _Where, _Line);


Не подскажите в чем проблема
Re: std::sort и bind
От: placement_new  
Дата: 18.11.08 12:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте есть такой код

А>
А>        std::vector< sValue > m_stdVector;
А>    m_stdVector.push_back(sValue(2));
А>    m_stdVector.push_back(sValue(1));
А>    std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1));
А>


А>При выполнении получаю DEBUG_ERROO


А>
А>_DEBUG_ERROR2("invalid operator<", _Where, _Line);
А>


А>Не подскажите в чем проблема

А sort разве не бинарный предикат принимает?
Re: std::sort и bind
От: semlanik Россия  
Дата: 18.11.08 12:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте есть такой код

А>
А>        std::vector< sValue > m_stdVector;
А>    m_stdVector.push_back(sValue(2));
А>    m_stdVector.push_back(sValue(1));
А>    std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1));
А>


А>При выполнении получаю DEBUG_ERROO


А>
А>_DEBUG_ERROR2("invalid operator<", _Where, _Line);
А>


А>Не подскажите в чем проблема


Гм, возможно что для класса sValue вы не определили bool operator<(sValue&) который насколько я помню необходим для сортировки.
Re: std::sort и bind
От: ioni Россия  
Дата: 18.11.08 13:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте есть такой код

А>
А>        std::vector< sValue > m_stdVector;
А>    m_stdVector.push_back(sValue(2));
А>    m_stdVector.push_back(sValue(1));
А>    std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1));
А>


А>При выполнении получаю DEBUG_ERROO


А>
А>_DEBUG_ERROR2("invalid operator<", _Where, _Line);
А>


А>Не подскажите в чем проблема


Для вашего класса не правильно реализован оператор <
Re: std::sort и bind
От: kankan Украина  
Дата: 18.11.08 15:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте есть такой код

А>
А>        std::vector< sValue > m_stdVector;
А>    m_stdVector.push_back(sValue(2));
А>    m_stdVector.push_back(sValue(1));
А>    std::sort( m_stdVector.begin(), m_stdVector.end(), boost::bind(&sValue::iA,_1));
А>


А>При выполнении получаю DEBUG_ERROO


А>
А>_DEBUG_ERROR2("invalid operator<", _Where, _Line);
А>


А>Не подскажите в чем проблема


Я так понял, тебе надо отсортировать вестор структур по полю iA. да?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.