<?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[Datenstruktur gesucht]]></title><description><![CDATA[<p>Mir fällt keine Effiziente Lösung für folgendes Problem ein:</p>
<p>Ich habe eine Klasse ResourceCache welche Objekte von der Klasse Resourcen (Dateien) verwaltet. Benutzer greifen auf Resourcen über Handles zu und ResourceCache gibt die Resource raus wenn sie sich im Speicher befindet, andernfalls wird die Datei vorher eingelesen. Wenn kein Platz mehr da ist werden Dateien rausgeworfen die schon länger nicht mehr verwendet wurden.</p>
<p>Das ganze sieht im Moment so aus:</p>
<pre><code class="language-cpp">class ResHandle
{
	class ResCache;
	friend ResCache;

	uint32 mFileHandle;

	boost::optional&lt; uint32 &gt; mHash;
};

class ResCache
{
	private:

	class Resource
	{
	public:
		Resource( const ResHandle&amp; rh, FileBuffer data,
				  uint32 currentTime )
			: mResHandle( rh ), mLastTimeUsed( currentTime ), mData( data )
		{
		}

		ResHandle mResHandle;
		uint32 mLastTimeUsed;
		FileBuffer mData;
	};

	static ResCache* mSingletonInstance;

	const uint32 mMaxSize;
	uint32 mCurrentSize;

	typedef std::map&lt; uint32, Resource &gt; ResourceMap; //uint32 ist ein hash-wert
	ResourceMap mResources;

	//Das erste Element ist immer das älteste, bei jedem Benutzen muss das Element gesucht werden und nach hinten
	//geschoben.
	std::list&lt; Resource* &gt; mTimeSortedList;
};
</code></pre>
<p>Die std::list-Lösung würde ich gerne gegen etwas effizienteres austauschen.<br />
Nur mir fällt keine Datenstruktur ein die hier passen würde (sortiert, schnelles suchen sowie löschen und einfügen).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153809/datenstruktur-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 15:02:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153809.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Jul 2006 16:08:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datenstruktur gesucht on Thu, 20 Jul 2006 16:08:05 GMT]]></title><description><![CDATA[<p>Mir fällt keine Effiziente Lösung für folgendes Problem ein:</p>
<p>Ich habe eine Klasse ResourceCache welche Objekte von der Klasse Resourcen (Dateien) verwaltet. Benutzer greifen auf Resourcen über Handles zu und ResourceCache gibt die Resource raus wenn sie sich im Speicher befindet, andernfalls wird die Datei vorher eingelesen. Wenn kein Platz mehr da ist werden Dateien rausgeworfen die schon länger nicht mehr verwendet wurden.</p>
<p>Das ganze sieht im Moment so aus:</p>
<pre><code class="language-cpp">class ResHandle
{
	class ResCache;
	friend ResCache;

	uint32 mFileHandle;

	boost::optional&lt; uint32 &gt; mHash;
};

class ResCache
{
	private:

	class Resource
	{
	public:
		Resource( const ResHandle&amp; rh, FileBuffer data,
				  uint32 currentTime )
			: mResHandle( rh ), mLastTimeUsed( currentTime ), mData( data )
		{
		}

		ResHandle mResHandle;
		uint32 mLastTimeUsed;
		FileBuffer mData;
	};

	static ResCache* mSingletonInstance;

	const uint32 mMaxSize;
	uint32 mCurrentSize;

	typedef std::map&lt; uint32, Resource &gt; ResourceMap; //uint32 ist ein hash-wert
	ResourceMap mResources;

	//Das erste Element ist immer das älteste, bei jedem Benutzen muss das Element gesucht werden und nach hinten
	//geschoben.
	std::list&lt; Resource* &gt; mTimeSortedList;
};
</code></pre>
<p>Die std::list-Lösung würde ich gerne gegen etwas effizienteres austauschen.<br />
Nur mir fällt keine Datenstruktur ein die hier passen würde (sortiert, schnelles suchen sowie löschen und einfügen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101362</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 20 Jul 2006 16:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to Datenstruktur gesucht on Thu, 20 Jul 2006 17:49:07 GMT]]></title><description><![CDATA[<p>Prüfe für Deinen Zweck die Standard STL Sequenz Container std::vector, std::deque und std::list.</p>
<p>vector ist der Standardtyp.</p>
<p>deque dagegen bietet sich an, wenn die Mehrzahl der Einschübe oder Löschungen an beiden Enden der Sequenz (Anfang, Ende) statt finden.</p>
<p>list wird eingestzt, wenn viele Einschübe oder Löschungen in der Mitte der Sequenz durchgeführt werden. list ist ideal zum Sortieren, weil nicht der copycon der Elemente für Verschiebungen benötigt wird.</p>
<p>Vielleicht ist deque der richtige Container für Dich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101415</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Thu, 20 Jul 2006 17:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Datenstruktur gesucht on Thu, 20 Jul 2006 18:27:30 GMT]]></title><description><![CDATA[<p>List wäre schon optimal, wenn die Suche nicht so langsam wäre.<br />
Deque hat ja das gleiche Problem wie vector was das Entfernen von Elementen in der Mitte angeht.<br />
Ich befürchte, dass ich eines von beidem in Kauf nehmen muss und Zeiger hin- und her zu kopieren geht ja recht flott, ich denke du hast recht deque dürft das beste sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101436</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 20 Jul 2006 18:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datenstruktur gesucht on Thu, 20 Jul 2006 18:36:35 GMT]]></title><description><![CDATA[<p>Wie wär's mit ner list von Pointern für die remove-Liste und einer eigenen Datenstruktur (z.B. map oder auch vector) für den Zugriff. Dort könnte dann auch jeweils noch ein iterator auf den Eintrag in der list hinterlegt sein.</p>
<p>Bei jedem Zugriff auf ein bekanntes Element:<br />
Element lokalisieren, über den Iterator dort das Element ans Ende der remove-Liste befördern, Element zurückliefern.</p>
<p>Bei Zugriff auf neues Element:<br />
Am wenigsten benutzes Element aus der Liste ablesen und entfernen, neues Element einlesen und ans Ende der remove-Liste setzen.</p>
<p>MfG Jester</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101442</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Thu, 20 Jul 2006 18:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to Datenstruktur gesucht on Thu, 20 Jul 2006 18:51:08 GMT]]></title><description><![CDATA[<p>So hab ich es ja im Moment (nur ohne iterator), aber die Idee mit dem Iterator auf die list-Einträge ist klasse, damit kann ich das Suchen umgehen <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>Danke <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1101449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101449</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 20 Jul 2006 18:51:08 GMT</pubDate></item></channel></rss>