Rachus: Wann ist ein const_cast angebracht?

Beitrag lesen

Hallo,

Oder eher nicht, wie willst du denn den Pointer finden? Oder ist die find-Methode von dir (überschrieben)?

Nein, die find-Methode ist die aus der Standardbibliothek. Mithilfe der letzten beiden Template-Argumenten von std::unordered_multimap kann ich aber bestimmen, wie der Hash und Vergleich unternommen werden soll. Dazu verwendet ich die beiden Klassen:

template<class Key, class Value, class Hash, class Equals>
inline size_t
UM_Wrapper<Key, Value, Hash, Equals>::Hasher::operator()
(const Key* const key) const
{
return hasher(*key);
}

template<class Key, class Value, class Hash, class Equals>
inline bool
UM_Wrapper<Key, Value, Hash, Equals>::Equaler::operator()
(const Key* const first, const Key* const second) const
{
return equaler(*first, *second);
}

Und in der Headerdatei ist die Map definiert:

std::list<Key> identifiers;
std::unordered_multimap<Key*, std::pair<class std::list<Key>::iterator, Value>, Hasher, Equaler> data;

Da find standarmäßig zum Vergleichen den operator() meines Equaler und zum Hashen den Operator meines Hasher aufruft, kann ich das Verhalten von find (und einigen anderen Methoden auch) beeinflussen.

Grüße,

Rachus