<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sgi: Hash_map mit eigener hash funktion]]></title><description><![CDATA[<p>Hallo,<br />
ich komme einfach nicht darauf wie ich die stl extension hash_map so für mich anwenden kann dass eine eigene hash funktion genutzt wird.</p>
<p>Meine ersten versuche enden leider immer nur so:</p>
<pre><code class="language-cpp">struct MyHash
{
    int operator()(const int key) const
    {        
        int ret = 0; 
        //for each e in vector 
        ret = (ret * 31) + hash_i(key);
        std::cout &lt;&lt; &quot;Der key: &quot; &lt;&lt; ret &lt;&lt; std::endl;
        return ret;
    }

    int hash_i(int x) const
    {
        return *(int*)&amp;x;
    }
};

struct HASH_DATA
{
    std::vector&lt;double&gt; v1;
    std::vector&lt;double&gt; v2;
    int unit_vec_size;
    int unit_vec_row;   
};

Class::Class()
{
    hash_map&lt;int, HASH_DATA, MyHash, eqint&gt; hash;
}
</code></pre>
<p>ich kann mir nix anderes vorstellen als die hash-funktion in einem hash zu realisieren...ich kann doch keine funktion direkt als typ angeben oder?<br />
mache ich das so richtig?</p>
<p>wenn ich z.B einen ganzen vektor übergeben wollen würde wäre das dann auch noch in Ordnung?</p>
<p>Zusätzlich würde mich interessieren ob es so in Ordnung wäre mehrere vektoren in einem struct zu speichern um dieses dann als daten im hash abzulegen?</p>
<p>Für Hilfestellung bin ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162106/sgi-hash_map-mit-eigener-hash-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 03:02:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162106.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Oct 2006 20:42:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sgi: Hash_map mit eigener hash funktion on Sat, 14 Oct 2006 20:43:41 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich komme einfach nicht darauf wie ich die stl extension hash_map so für mich anwenden kann dass eine eigene hash funktion genutzt wird.</p>
<p>Meine ersten versuche enden leider immer nur so:</p>
<pre><code class="language-cpp">struct MyHash
{
    int operator()(const int key) const
    {        
        int ret = 0; 
        //for each e in vector 
        ret = (ret * 31) + hash_i(key);
        std::cout &lt;&lt; &quot;Der key: &quot; &lt;&lt; ret &lt;&lt; std::endl;
        return ret;
    }

    int hash_i(int x) const
    {
        return *(int*)&amp;x;
    }
};

struct HASH_DATA
{
    std::vector&lt;double&gt; v1;
    std::vector&lt;double&gt; v2;
    int unit_vec_size;
    int unit_vec_row;   
};

Class::Class()
{
    hash_map&lt;int, HASH_DATA, MyHash, eqint&gt; hash;
}
</code></pre>
<p>ich kann mir nix anderes vorstellen als die hash-funktion in einem hash zu realisieren...ich kann doch keine funktion direkt als typ angeben oder?<br />
mache ich das so richtig?</p>
<p>wenn ich z.B einen ganzen vektor übergeben wollen würde wäre das dann auch noch in Ordnung?</p>
<p>Zusätzlich würde mich interessieren ob es so in Ordnung wäre mehrere vektoren in einem struct zu speichern um dieses dann als daten im hash abzulegen?</p>
<p>Für Hilfestellung bin ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1154841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1154841</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Sat, 14 Oct 2006 20:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to Sgi: Hash_map mit eigener hash funktion on Mon, 16 Oct 2006 01:48:32 GMT]]></title><description><![CDATA[<p>Also was du in der hash_map ablegst bleibt alleine dir überlassen, der &quot;Value&quot; Teil ist komplett unkritisch. Vonwegen Fash-Funktion, probiers einfach aus. Als Typ würdest du dann in deinem Beispiel einfach &quot;int (int)&quot; oder &quot;int (*)(int)&quot; übergeben, und die Funktion müsstest du dann im Konstruktor übergeben (z.B. den Konstruktor &quot;hash_map(size_type n, const hasher&amp; h)&quot;).</p>
<p>Also z.B.</p>
<pre><code class="language-cpp">int my_hash(int key)
{
    return key + (key &gt;&gt; 3);
}

hash_map&lt;int, HASH_DATA, int (*)(int), eqint&gt; hash(10, my_hash);
</code></pre>
<p>Ist natürlich einfacher es in eine Klasse/Struct zu packen, dann musst du beim anlegen nicht immer die Funktion mitgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155356</guid><dc:creator><![CDATA[Plotzenhotz]]></dc:creator><pubDate>Mon, 16 Oct 2006 01:48:32 GMT</pubDate></item></channel></rss>