Hash_Map



  • Hallo,

    ich bins mal wieder. Also eine triviale Nutzung der Hashmap ist kein Problem, allerdings hab ich die Referenzen so interpretiert das man seine eigene Hashfunktion mit angeben kann und das diese dann ausgewertet wird um den entsprechenden Index festzulegen?

    Folgendes habe ich :

    struct MyHashTraits
    {
    	static const size_t bucket_size = 4;
    	static const size_t min_buckets = 8;
    	size_t operator()( int key) const
    	{
    		return hash_func(key);
    	}
    	bool operator()(int  lhs, int  rhs) const
    	{
    		return order_func(lhs, rhs);
    	}
    
    	private:
    
    		hash<int> hash_func;
    		testfun order_func;
    
    };
    
    int main(...)
    {
      hash_map<int ,string,MyHashTraits> hm;
      hm.insert(make_pair(1,"hi"));
    }
    

    Das Funktioniert auch, aber wie ihr seht muss ich den Index (1) und den Wert "hi" zusammen einfügen. Der Sinn ist es doch den Wert "hi" anzugeben, und dann wird ein entsprechender Index berechnet und das "hi" dort platziert. Also eher etwas in der Art insert("hi"). Man kann natürlich einen Hash selbst bauen, aber wenn es die Klasse schonmal gibt. Ich vermute einfach ich verstehe sie nicht richtig. Vielleicht kann ja jemand helfen.

    viele Grüße


  • Administrator

    1. Es gibt keine hash_map im aktuellen Standard, TR1 oder zukünftigen Standard.
    2. Womöglich meinst du eher unordered_map . Ist allerdings nicht im aktuellen Standard, aber Teil von TR1 und des nächsten Standards.
    3. Vielleicht brauchst du eher unordered_set ? Dort kannst du dann aber nicht nach dem Hash suchen, was aber auch nicht der Sinn von diesen Container ist. Ihr Name bedeutet nur, wie sie intern aufgebaut wird, nicht dass man mit einem Hash auf die gespeicherten Werte zugreifen kann.

    Grüssli



  • Vielen dank für die Antwort. Also wirklich brauchen tu ich es nicht. Ich wollts nur mal ausprobieren weil es das halt gibt. Wenns aber sowieso nicht Standard ist brauch ich das erstmal nicht.

    viele Grüße!



  • Vielleicht hilft http://www.sgi.com/tech/stl/hash_map.html bzw. http://www.sgi.com/tech/stl/hash_set.html . Dort sind kleine Beispiele angegeben. Der gcc bietet sie in einem gesonderten namespace an (glaube ich zumindestens). Sollten zu unordered_map bzw. unordered_set kompatibel sein.


Anmelden zum Antworten