<?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[Sortierung eines std::vector&amp;lt;T&amp;gt;&#x27;s, ohne diesen zu ändern]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>ich möchte einen <code>std::vector&lt;T&gt;</code> (am liebsten als Template) sortieren, ohne diesen zu verändern. Dazu habe ich mir überlegt, dass ich einfach einen zweiten Vektor mit Indizes anlege, damit auf den 1. zugreife und somit nur die Reihenfolge des 2. &quot;Indexvektors&quot; anpassen muss, also in etwa: <code>v_const[v_idx[i&rsqb;&rsqb;</code> .<br />
Gibt es eine schnelle Möglichkeit, dass mit der STL zu erledigen? <code>std::sort</code> kann ich dafür nicht verwenden, oder?</p>
<p>(Anm.: Da der Inhalt des zu sortierenden Vektors beliebig sein soll, möchte ich bei der Sortierung auch eine Vergleichsfunktion angeben können, so wie auch bei <code>std::sort</code> .)</p>
<p>Danke für euche Hilfe! <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>Grüße<br />
Sorter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289685/sortierung-eines-std-vector-lt-t-gt-s-ohne-diesen-zu-ändern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 23:52:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289685.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Jul 2011 00:02:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sortierung eines std::vector&amp;lt;T&amp;gt;&#x27;s, ohne diesen zu ändern on Mon, 11 Jul 2011 00:02:26 GMT]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>ich möchte einen <code>std::vector&lt;T&gt;</code> (am liebsten als Template) sortieren, ohne diesen zu verändern. Dazu habe ich mir überlegt, dass ich einfach einen zweiten Vektor mit Indizes anlege, damit auf den 1. zugreife und somit nur die Reihenfolge des 2. &quot;Indexvektors&quot; anpassen muss, also in etwa: <code>v_const[v_idx[i&rsqb;&rsqb;</code> .<br />
Gibt es eine schnelle Möglichkeit, dass mit der STL zu erledigen? <code>std::sort</code> kann ich dafür nicht verwenden, oder?</p>
<p>(Anm.: Da der Inhalt des zu sortierenden Vektors beliebig sein soll, möchte ich bei der Sortierung auch eine Vergleichsfunktion angeben können, so wie auch bei <code>std::sort</code> .)</p>
<p>Danke für euche Hilfe! <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>Grüße<br />
Sorter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091197</guid><dc:creator><![CDATA[VecSorter]]></dc:creator><pubDate>Mon, 11 Jul 2011 00:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierung eines std::vector&amp;lt;T&amp;gt;&#x27;s, ohne diesen zu ändern on Mon, 11 Jul 2011 00:19:40 GMT]]></title><description><![CDATA[<p>Als Anregung, kann jetzt nicht ordentlich pr0ggern, muss Stargate gucken.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

template&lt;typename T,typename LESS=std::less&lt;T&gt;&gt;
struct IndexedComparator{
    std::vector&lt;T&gt;&amp; vec;
    LESS less;
    IndexedComparator(std::vector&lt;T&gt;&amp; vec,LESS less=LESS())
    :vec(vec),less(less){
    }
    bool operator()(size_t a,size_t b){
        return less(vec[a],vec[b]);
    }
};

int main() {
    using namespace std;
    vector&lt;string&gt; vec;
    vec.push_back(&quot;for&quot;);
    vec.push_back(&quot;if&quot;);
    vec.push_back(&quot;do&quot;);
    vec.push_back(&quot;while&quot;);

    vector&lt;size_t&gt; ivec;
    for(size_t i=0;i&lt;vec.size();++i)
        ivec.push_back(i);

    sort(ivec.begin(),ivec.end(),IndexedComparator&lt;string&gt;(vec));

    for(vector&lt;size_t&gt;::iterator i=ivec.begin();i!=ivec.end();++i)
        cout&lt;&lt;vec[*i]&lt;&lt;'\n';
    cout&lt;&lt;'\n';

    sort(ivec.begin(),ivec.end(),IndexedComparator&lt;string,std::greater&lt;string&gt;&gt;(vec));

    for(vector&lt;size_t&gt;::iterator i=ivec.begin();i!=ivec.end();++i)
        cout&lt;&lt;vec[*i]&lt;&lt;'\n';
    cout&lt;&lt;'\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2091199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091199</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 11 Jul 2011 00:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierung eines std::vector&amp;lt;T&amp;gt;&#x27;s, ohne diesen zu ändern on Mon, 11 Jul 2011 08:15:22 GMT]]></title><description><![CDATA[<p>Wenn der sortierte Vector anschießend unabhängig vom Originalvektor sein soll, kannst du letzteren auch einfach kopieren und die Kopie sortieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091249</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 11 Jul 2011 08:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierung eines std::vector&amp;lt;T&amp;gt;&#x27;s, ohne diesen zu ändern on Mon, 11 Jul 2011 09:10:24 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Schön!<br />
Ich hätte sonst noch statt der Vektor-Referenz einen RandomAccess-Iterator genommen.</p>
<p>also</p>
<pre><code class="language-cpp">template&lt;
  class RandAccIter,
  class Less = std::less&lt;
                 typename std::iterator_traits&lt;RandAccIter&gt;::value_type
               &gt;
&gt;
struct index_less {
  typedef typename std::iterator_traits&lt;RandAccIter&gt;::difference_type idx_type;
  RandAccIter beg_;
  Less less_;
  ...
  bool operator()(idx_type a, idx_type b) const {
    return less_(beg_[a],beg_[b]);
  }
};
</code></pre>
<p>(oder so ähnlich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091265</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 11 Jul 2011 09:10:24 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierung eines std::vector&amp;lt;T&amp;gt;&#x27;s, ohne diesen zu ändern on Mon, 11 Jul 2011 09:04:58 GMT]]></title><description><![CDATA[<p>Vieleicht willst Du ja auch statt eiens Vectors eientlic sowas wie ein boost::multi_index?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091266</guid><dc:creator><![CDATA[Drehleiter]]></dc:creator><pubDate>Mon, 11 Jul 2011 09:04:58 GMT</pubDate></item></channel></rss>