все. Я пытаюсь использовать std::multiset
для автоматического заказа при вставке. Его элементы - от std::shared_ptr
до DataCell
объектов. Вот код в заголовочном файле:
#include <iostream>
#include <string>
#include <set>
#include <memory>
class DataCell
{
public:
double _cartesianDistance;
};
typedef std::shared_ptr<DataCell> DataCellPtr;
bool operator<(const DataCellPtr &d1, const DataCellPtr &d2) {
std::cout << "lalala" << std::endl;
return d1->_cartesianDistance < d2->_cartesianDistance;
}
typedef std::multiset<DataCellPtr, std::less<DataCellPtr>> DataCellPtrMultiset;
int main(){
DataCellPtr d1( new DataCell );
DataCellPtr d2( new DataCell );
d1->_cartesianDistance = 1.0;
d2->_cartesianDistance = 2.0;
DataCellPtrMultiset dms;
dms.insert( d1 );
dms.insert( d2 );
}
Ожидаемый результат:
lalala
lalala
Все работает нормально, за исключением того, что мой заказ не выполняется, так как я должен был печатать "lalala"
s на моем std::out
, чего не происходит. Я предполагаю, что мультимножество использует порядок по умолчанию shared_ptr
. Член _cartesianDistance
является двойным. Вопрос: как переопределить порядок по умолчанию shared_ptr
?