У меня есть некоторые объекты, которые я хочу отсортировать на host_vector, Эти объекты имеют определенный оператор Operator <, который сравнивает Id (целое число) объектов. Вектор содержит указатели на объекты.thrust :: sort missorts some values
Если я выполняю thrust::sort(object_vector.begin(),object_vector.end());
, а затем перебирать вектор для печати идентификаторов я получаю:
48, 49, 0, 1, [..], 47, 50, [..]
Если я выполняю std::sort(object_vector.begin(),object_vector.end());
я получаю идентификаторы в порядке. Я не знаю, почему эти два значения не соответствуют порядку (они одинаковы для одного и того же количества объектов).
Объекты в соответствии с этим идентификатором не имеют ничего особенного.
stable_sort ничего не меняет. Сортировка вектора с работами Id. Операторы:
bool operator<(MultiLegBase* other){return (this->getID()<other->getID());}
bool operator==(MultiLegBase* other){return this->getID()==other->getID();}
bool operator>(MultiLegBase* other){return this->getID()>other->getID();}
virtual unsigned int const getID(return m_Id;)
Что произойдет, если вы сначала создадите вектор только целочисленных идентификаторов, а затем 'thrust :: sort', что? Если он работает, ваш 'operator <' или ваш 'operator =', вероятно, ошибочны. – Useless
Покажите нам соответствующий код для вашего объекта – Bart
Предоставьте полный репроектор. Это не должно быть так сложно. В процессе создания репродуктора вы можете обнаружить эту проблему. –