Я не могу понять синтаксис для поиска структур в контейнерах.
У меня есть мультимножество Event
структур. Я пытаюсь найти одну из этих структур, ища по ее ключу. Я получаю сообщение об ошибке компилятора ниже.
struct Event {
public:
bool operator < ( const Event & rhs ) const {
return ( time < rhs.time );
}
bool operator > ( const Event & rhs ) const {
return ( time > rhs.time );
}
bool operator == ( const Event & rhs ) const {
return ( time == rhs.time );
}
double time;
int eventID;
int hostID;
int s;
};
typedef std::multiset< Event, std::less< Event > > EventPQ;
EventPQ currentEvents;
double oldRecTime = 20.0;
EventPQ::iterator ceItr = currentEvents.find( EventPQ::key_type( oldRecTime ) ); // no matching function call
Я пробовал несколько перестановок, но безрезультатно. Я думал, что определения оператора условного равенства будет достаточно.
Решение
После исправления моей опечатки (извините) у меня теперь есть решение, наиболее близкое к AraK, дополненное предлагаемым Soapbox использованием explicit
:
struct Event {
explicit Event(double t) : time(t), eventID(), hostID(), s() {}
Event(double t, int eid, int hid, int stype) : time(t), eventID( eid ), hostID( hid ), s(stype) {}
...
};
EventPQ::iterator ceItr = currentEvents.find( EventPQ::key_type( Event(oldRecTime) ) );
Я недавно обнаружил, что другим вариантом было бы использовать find_if
, обсуждается здесь .
Спасибо за помощь.