сначала я здесь новый, а английский - не мой родной язык, поэтому приношу свои извинения за любые грамматические ошибки, но я считаю, что это сообщество действительно приятно, поэтому я постараюсь задать свой вопрос как точную как я могу.C++: используйте собственный класс в мультимножеством контейнере
Я хочу добавить свой собственный объект класса в мультимножество контейнера stl и хочу сортировать его с помощью моего собственного перегруженного оператора меньшего размера, определенного в моем классе. Я действительно опробовал несколько решений, но ничего действительно не сработало, поэтому я надеюсь, что кто-то может дать мне полезные подсказки для его решения.
Вот моя общая идея моего определения класса:
class object {
public:
int first;
string second;
object(int f, string s) {
first = f;
second = s;
}
bool operator<(const object &comp) {
return first < comp.first;
}
};
Это была моя первая попытка, и это не сработало, так что я также попробовал объявить перегруженный оператор как метод другу, но Бесполезный» t работа также.
Вот короткий код выдержка из моей основной функции:
includes ...
//code omitted
int main() {
multiset<object*> mmset;
mmset.insert(new object(10, "test"));
mmset.insert(new object(11, "test"));
return 0;
}
Через некоторое время я начал отладки мой код и попытаться выяснить, где проблема, и я наткнулся на следующую вещь, которые сделали я немного подозрительно.
код экстракт из СТЛ:
// TEMPLATE STRUCT less
template<class _Ty>
struct less : public binary_function<_Ty, _Ty, bool>
{ // functor for operator<
bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator< to operands
return (_Left < _Right);
}
};
Я поставил точку останова на этой линии и заметил, что программа делает здесь, и я не знаю почему, но он сравнивает только адреса из двух объекты и возвращать так всегда false. Он никогда не вызывает мой перегруженный меньше оператора, хотя оператор существует, а переменные _Left и _Right содержат адрес для моего объекта.
Я был бы очень признателен, если бы кто-то мог мне помочь.
Лучшие Приветствия
Том
Что касается вашей первой попытки, что вы подразумеваете под "это не сработало"? Не компилировался? Сбой во время выполнения? Не дали ожидаемых результатов? Каково было сообщение об ошибке? –
Да, конечно, это было немного расплывчато. Я имел в виду, что он не дает ожидаемых результатов. Сама программа работает без каких-либо ошибок, просто она не сортируется. – tom1991te