<?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[Tastatur Codes und Namen linken in beide Richtungen]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich möchte gern meine Tastaturcode (char) mit den Namen der Tasten verknüpfen (std::string). Wie mach ich das am besten?</p>
<p>Ich habe mich schon nach set, multiset und map, multimap erkundigt, aber so wie ich das verstehe funktioniert die Zuordnung da nur in 1 Richtung. Ich brauche aber beide Richtungen.<br />
char -&gt; std::string<br />
std::string -&gt; char<br />
Also zu einem Code (char) will ich den Namen (std::string) auslesen können und zu einem Namen (std::string) will ich den Code (char) haben.</p>
<p>Zwei Maps kommen im Moment auch nicht in Frage, da ich ja dann auch beide synchron halten muss und die Fehlerquote ist mir zu hoch.</p>
<p>Gruß<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297715/tastatur-codes-und-namen-linken-in-beide-richtungen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 07:29:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297715.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Jan 2012 11:46:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 11:46:28 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich möchte gern meine Tastaturcode (char) mit den Namen der Tasten verknüpfen (std::string). Wie mach ich das am besten?</p>
<p>Ich habe mich schon nach set, multiset und map, multimap erkundigt, aber so wie ich das verstehe funktioniert die Zuordnung da nur in 1 Richtung. Ich brauche aber beide Richtungen.<br />
char -&gt; std::string<br />
std::string -&gt; char<br />
Also zu einem Code (char) will ich den Namen (std::string) auslesen können und zu einem Namen (std::string) will ich den Code (char) haben.</p>
<p>Zwei Maps kommen im Moment auch nicht in Frage, da ich ja dann auch beide synchron halten muss und die Fehlerquote ist mir zu hoch.</p>
<p>Gruß<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164017</guid><dc:creator><![CDATA[Scarabol]]></dc:creator><pubDate>Thu, 05 Jan 2012 11:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 12:00:51 GMT]]></title><description><![CDATA[<p><code>boost.bimap</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164025</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 05 Jan 2012 12:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 12:00:56 GMT]]></title><description><![CDATA[<p>pack doch einfach beide maps in eine eigene Klasse, die sich um die Synchronität kümmert. Nach außen hin bietest du dann einfach zwei Methoden oder []Operatoren string -&gt; char und char -&gt; string an.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164026</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Thu, 05 Jan 2012 12:00:56 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 12:01:23 GMT]]></title><description><![CDATA[<p>Boost hat eine <code>bimap</code> , das könnte's sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164028</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 05 Jan 2012 12:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 12:24:41 GMT]]></title><description><![CDATA[<p>Oder klassisch einfach zwei Felder. Tastaturcodes klingt so, als gäbe es höchstens 100-200, da könnte eine direkte Suche noch eine akzeptable Laufzeit haben und du hast dann bei sonstigen Zugriffen schön einfache Strukturen. Du kannst auch das Feld, welches häufiger durchsucht wird sortieren, dann hast du in diese Richtung sogar log(N) Suchzeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164049</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Jan 2012 12:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 12:38:13 GMT]]></title><description><![CDATA[<p>vorrausgesetzt er schreibts auch ordentlich und in bisschen auf speed.<br />
andererseits, bei den mengen kann er auch gleich nicht nur 2 arrays nehmen sondern gleich 4 um in beide richtungen alles sortiert haben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164057</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 05 Jan 2012 12:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 12:48:03 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>vorrausgesetzt er schreibts auch ordentlich und in bisschen auf speed.<br />
andererseits, bei den mengen kann er auch gleich nicht nur 2 arrays nehmen sondern gleich 4 um in beide richtungen alles sortiert haben</p>
</blockquote>
<p>Dann hat er ja wieder seine Synchronisationsprobleme <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> .</p>
<p>(Der Smiley will heißen, dass das ein selbst gemachtes Problem ist. Siehe KN4CK3Rs Beitrag wie man so etwas idiotensicher lösen kann)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164069</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Jan 2012 12:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 13:07:25 GMT]]></title><description><![CDATA[<p>wow, danke für die vielen Antworten. Bin noch nicht so weit, aber um das Problemchen nochmal deutlicher zu machen.</p>
<p>Ich hab zwei ziemlich lange Listen mit den Namen und den Codes für die einzelnen Tasten. Im Programm selber brauch ich dann Funktionen die mir für einen bestimmten Code den Tastennamen zurückliefern und für einen Tastennamen einen Code zurückliefern. Im Moment verfolge ich noch die bimap Methode. Wie ich das in einer eigenen Klasse machen kann, hab ich schon versucht aber kriegs nicht hin...</p>
<p>Gruß<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164085</guid><dc:creator><![CDATA[Scarabol]]></dc:creator><pubDate>Thu, 05 Jan 2012 13:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 13:53:24 GMT]]></title><description><![CDATA[<p>Wenn boost.bimap ausscheidet kannst du ja vielleicht sowas verwenden. ShortCut könnte man zur Not durch std::pair ersetzen, aber ich würd´ das explizit ausformulieren.</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

// Klasse zum Ablegen der Key/Name Paare
struct ShortCut // oder was auch immer
{
   char Key;
   std::string Name;

   ShortCut() : Key( 0 )
   {
   }

   ShortCut( char Key, const std::string Name ) : Key( Key ), Name( Name )
   {
   }
};

// Prädikat zum Suchen nach Paaren anhand des Keys
struct ShortCutEqualsKey : std::unary_function&lt;ShortCut,bool&gt;
{
   char Key;

   ShortCutEqualsKey ( char Key ) : Key( Key )
   {
   }

   bool operator()( const ShortCut&amp; op ) const
   {
      return op.Key == Key;
   }
};

// Prädikat zum Suchen nach Paaren anhand des Namen
struct ShortCutEqualsName : std::unary_function&lt;ShortCut,bool&gt;
{
   std::string Name;

   ShortCutEqualsName( const std::string&amp; Name ) : Name( Name )
   {
   }

   bool operator()( const ShortCut&amp; op ) const
   {
      return op.Name == Name;
   }
};

int main()
{
   std::vector&lt;ShortCut&gt; ShortCuts;
   ShortCuts.push_back( ShortCut( 'a', &quot;Aaaargh!&quot; ) );
   ShortCuts.push_back( ShortCut( 'b', &quot;Bäh!&quot; ) );

   std::vector&lt;ShortCut&gt;::iterator i1 = std::find_if( ShortCuts.begin(), ShortCuts.end(), ShortCutEqualsKey ( 'a' ) );

   std::vector&lt;ShortCut&gt;::iterator i2 = std::find_if( ShortCuts.begin(), ShortCuts.end(), ShortCutEqualsName ( &quot;Bäh!&quot; ) );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2164100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164100</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 05 Jan 2012 13:53:24 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 14:14:20 GMT]]></title><description><![CDATA[<p>Oder irgendwas mit einem statischen mapping:</p>
<pre><code class="language-cpp">//impl.h
#ifndef INCLUDE_GUARD
#define INCLUDE_GUARD

unsigned char find(std::string const &amp; s);
std::string find(unsigned char c);

#endif
</code></pre>
<pre><code class="language-cpp">//impl.cpp
#include &quot;impl.h&quot;

namespace
{
    typedef std::array&lt;char const *, 42&gt; lookup_table_type;

    lookup_table_type make_key_map()
    {
        lookup_table_type table;
        table[0] = &quot;bla&quot;;
        table[1] = &quot;blub&quot;;
        table[2] = &quot;laber&quot;;
        //...
        table[41] = &quot;das_wars&quot;;
        return table;
    }

    lookup_table_type const &amp; get_key_map()
    {
        static lookup_table_type key_map = make_key_map();
        return key_map;
    } 
}

unsigned char find(std::string const &amp; s)
{
    lookup_table_type::const_iterator p = std::find(get_key_map().begin(), get_key_map().end(), s);
    if(p == get_key_map().end())
    {
        throw exception();
    }
    //evtl. noch einen offset auf die distanz rechnen, je nach mapping
    return std::distance(get_key_map().begin(), p);
}

std::string find(unsigned char c)
{
    //evtl. noch einen offset auf c rechnen, je nach mapping
    if(c &gt;= get_key_map().size())
    {
        throw exception();
    }
    return get_key_map()[c];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2164107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164107</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 05 Jan 2012 14:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 17:24:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4465">@Tachyon</a></p>
<p>Und wat machste, wenn die Keycodes nicht linear von 0-41 gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164234</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 05 Jan 2012 17:24:44 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Thu, 05 Jan 2012 21:24:49 GMT]]></title><description><![CDATA[<p>Dann hast Du Pech. Aber hier fehlen Informationen für genaue Lösungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164318</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 05 Jan 2012 21:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatur Codes und Namen linken in beide Richtungen on Sat, 07 Jan 2012 15:06:31 GMT]]></title><description><![CDATA[<p>Die Codes sind nicht linear und haben auch keine Beziehungen zueinander...</p>
<p>Gruß<br />
Scarabol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164894</guid><dc:creator><![CDATA[Scarabol]]></dc:creator><pubDate>Sat, 07 Jan 2012 15:06:31 GMT</pubDate></item></channel></rss>