simple C++ hash_set exemple

Je suis novice en C++ et STL. Je suis coincé avec l'exemple simple suivant de hachage ensemble de stockage personnalisé structures de données:

#include <iostream>
#include <ext/hash_set>

using namespace std;
using namespace __gnu_cxx;

struct trip {
    int trip_id;
    int delta_n;
    int delta_secs;

    trip(int trip_id, int delta_n, int delta_secs){
        this->trip_id = trip_id;
        this->delta_n = delta_n;
        this->delta_secs = delta_secs;
    }
};


struct hash_trip
{
    size_t operator()(const trip t)
    {
        hash<int> H;
        return H(t.trip_id);
    }
};

struct eq_trip
{
    bool operator()(const trip t1, const trip t2) {
        return (t1.trip_id==t2.trip_id) &&
        (t1.delta_n==t2.delta_n) &&
        (t1.delta_secs==t2.delta_secs);
    }
};

int main()
{
    hash_set<trip, hash_trip, eq_trip> trips;

    trip t  = trip(3,2,-1);
    trip t1  = trip(3,2,0);

    trips.insert(t);

}

lorsque j'essaie de compiler, je reçois le message d'erreur suivant:

/usr/include/c++/4.2.1/ext/hashtable.h: In member function size_t __gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>::_M_bkt_num_key(const _Key&, size_t) const [with _Val = trip, _Key = trip, _HashFcn = hash_trip, _ExtractKey = std::_Identity<trip>, _EqualKey = eq_trip, _Alloc = std::allocator<trip>]’:
/usr/include/c++/4.2.1/ext/hashtable.h:599:   instantiated from size_t __gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>::_M_bkt_num(const _Val&, size_t) const [with _Val = trip, _Key = trip, _HashFcn = hash_trip, _ExtractKey = std::_Identity<trip>, _EqualKey = eq_trip, _Alloc = std::allocator<trip>]’
/usr/include/c++/4.2.1/ext/hashtable.h:1006:   instantiated from void __gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>::resize(size_t) [with _Val = trip, _Key = trip, _HashFcn = hash_trip, _ExtractKey = std::_Identity<trip>, _EqualKey = eq_trip, _Alloc = std::allocator<trip>]’
/usr/include/c++/4.2.1/ext/hashtable.h:437:   instantiated from std::pair<__gnu_cxx::_Hashtable_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>, bool> __gnu_cxx::hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>::insert_unique(const _Val&) [with _Val = trip, _Key = trip, _HashFcn = hash_trip, _ExtractKey = std::_Identity<trip>, _EqualKey = eq_trip, _Alloc = std::allocator<trip>]’
/usr/include/c++/4.2.1/ext/hash_set:197:   instantiated from std::pair<typename __gnu_cxx::hashtable<_Value, _Value, _HashFcn, std::_Identity<_Value>, _EqualKey, _Alloc>::const_iterator, bool> __gnu_cxx::hash_set<_Value, _HashFcn, _EqualKey, _Alloc>::insert(const typename __gnu_cxx::hashtable<_Value, _Value, _HashFcn, std::_Identity<_Value>, _EqualKey, _Alloc>::value_type&) [with _Value = trip, _HashFcn = hash_trip, _EqualKey = eq_trip, _Alloc = std::allocator<trip>]’
try.cpp:45:   instantiated from here
/usr/include/c++/4.2.1/ext/hashtable.h:595: error: passing const hash_trip as this argument of size_t hash_trip::operator()(trip)’ discards qualifiers

Ce que je fais mal?

OriginalL'auteur dzhelil | 2009-09-03