<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867657</guid>
        <pubDate>Mon, 06 Jun 2022 16:57:15 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867657</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=427672&view=findpost&p=3867485'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-06-04T18:03:52+03:00">04.06.22, 15:03</time></span><div class='quote '>P.S. Формально тут никакого каррирования нет. Это я на случай, если сюда зайдёт какой-нибудь D_KEY  Каррирование в точном смысле этого термина означает немного другое и гораздо более обобщённое понятие.</div></div>P.P.S. Вот так больше будет похоже на каррирование:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto check= [](auto member, const auto&amp; key) { return [=](const auto &amp;it) { return comp(it, key, member); }; };</div><div class="code_line">&nbsp;</div><div class="code_line">void f(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;using namespace std::literals;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;auto myCar &nbsp; &nbsp; &nbsp; &nbsp;= std::find_if(autoPark.begin(), autoPark.end(), check(&amp;Car::mark, &nbsp; &quot;Корыто&quot;s));</div><div class="code_line">&nbsp;&nbsp;auto myFavorSeller= std::find_if(autoPark.begin(), autoPark.end(), check(&amp;Car::country,&quot;Россия&quot;s));</div><div class="code_line">&nbsp;&nbsp;auto myMountlyPay = std::find_if(autoPark.begin(), autoPark.end(), check(&amp;Car::price, &nbsp; &nbsp; 0.2));</div><div class="code_line">&nbsp;&nbsp;auto myFavorSpeed = std::find_if(autoPark.begin(), autoPark.end(), check(&amp;Car::max_speed, 250));</div><div class="code_line">&nbsp;&nbsp;/* ...*/</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>Идея в сокращении количества передаваемых параметров путём фиксации некоторых из них и указании их значений отдельно. Но всё равно это не совсем полноценное каррирование.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867485</guid>
        <pubDate>Sat, 04 Jun 2022 15:03:52 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867485</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=427672&view=findpost&p=3867469'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2022-06-04T03:42:49+00:00">04.06.22, 03:42</time></span><div class='quote '>Там же он доказывает бессильность ООП в таких случаях.</div></div>Он прав лишь в том, что ООП далеко не везде вообще нужен. Так-то сравни с той же реализацией на Плюсах:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">typedef struct Car</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;std::string &nbsp;mark; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// марка</div><div class="code_line">&nbsp;&nbsp;std::string &nbsp;country; &nbsp; &nbsp; &nbsp; &nbsp; // страна-производитель</div><div class="code_line">&nbsp;&nbsp;double &nbsp; &nbsp; &nbsp; price; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // цена в млн.руб.</div><div class="code_line">&nbsp;&nbsp;unsigned int max_speed; &nbsp; &nbsp; &nbsp; // максимальная скорость</div><div class="code_line">&nbsp;&nbsp;/* ...*/</div><div class="code_line">} Car;</div><div class="code_line">&nbsp;</div><div class="code_line">std::array&#60;Car, ARRAY_SIZE&#62; autoPark;</div><div class="code_line">&nbsp;</div><div class="code_line">void f(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;using namespace std::literals;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;auto myCar &nbsp; &nbsp; &nbsp; &nbsp;= std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return val.mark &nbsp; == &quot;Корыто&quot;s; });</div><div class="code_line">&nbsp;&nbsp;auto myFavorSeller= std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return val.country== &quot;Россия&quot;s; });</div><div class="code_line">&nbsp;&nbsp;auto myMountlyPay = std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return val.price &nbsp; &nbsp; == 0.2; });</div><div class="code_line">&nbsp;&nbsp;auto myFavorSpeed = std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return val.max_speed == 250; });</div><div class="code_line">&nbsp;&nbsp;/* ...*/</div><div class="code_line">}</div></ol></div></div></div></div>Лямбды формально можно сохранять в отдельных переменных и не писать многократно то тут, то там одно и то же. К примеру, вон те четыре строчки можно свести к универсальному:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto comp(const auto &amp;it, const auto&amp; key, auto member) { return it.*member == key; }</div><div class="code_line">&nbsp;</div><div class="code_line">void g(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;using namespace std::literals;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;auto myCar &nbsp; &nbsp; &nbsp; &nbsp;= std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return comp(val, &quot;Корыто&quot;s, &amp;Car::mark); &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp;auto myFavorSeller= std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return comp(val, &quot;Россия&quot;s, &amp;Car::country); });</div><div class="code_line">&nbsp;&nbsp;auto myMountlyPay = std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return comp(val, &nbsp; &nbsp; &nbsp; 0.2, &amp;Car::price); &nbsp; &nbsp; });</div><div class="code_line">&nbsp;&nbsp;auto myFavorSpeed = std::find_if(autoPark.begin(), autoPark.end(), [](const auto &amp;val){ return comp(val, &nbsp; &nbsp; &nbsp; 250, &amp;Car::max_speed); });</div><div class="code_line">&nbsp;&nbsp;/* ...*/</div><div class="code_line">}</div></ol></div></div></div></div>просто в таком простом случае в этом нет особого смысла. Для более сложных компараторов (тут это comp) каррирование одного из его параметров позволит обойтись его единственным экземпляром, а частные лямбды останутся лёгкими. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-06-04T15:09:04+00:00">04.06.22, 15:09</time></span></span><br>
P.S. Формально тут никакого каррирования нет. Это я на случай, если сюда зайдёт какой-нибудь <strong class='tag-b'>D_KEY</strong> ;) Каррирование в точном смысле этого термина означает немного другое и гораздо более обобщённое понятие.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867469</guid>
        <pubDate>Sat, 04 Jun 2022 03:42:49 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867469</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>Qraizer</strong>, поклон за этот подход&#33;<br>
Нечто подобное рассматривает Стив М. в разделе &quot;Пример гибкого формата сообщений&quot;, где рассматриваются бакены :) Там же он доказывает бессильность ООП в таких случаях.<br>
Т е здесь ты применяешь лучшие мировые техники программирования. Ну а кто ж сомневался, что ты сишный ( + С++ ) демон&#33;<br>
<br>
<strong class='tag-b'>Qraizer</strong>, но с др.стороны ведь так удобно иметь маленькие функции, которые легко модифицировать. Например, надо искать двигатели не заданного объема, а заданных 2-3 объемов - все поменять в одном месте легко. Или по диапазону что-нибудь искать и т.п.<br>
<br>
всем спс, а перед <strong class='tag-b'>Qraizer</strong> снимаю шляпу ( в общем-то как и всегда ) )) В мире НЕ существует задачи на Си, которой <strong class='tag-b'>Qraizer</strong> не сломает хребет, хотя ... :whistle:]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867236</guid>
        <pubDate>Thu, 02 Jun 2022 12:57:24 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867236</link>
        <description><![CDATA[Qraizer: На самом деле тебе не надо иметь 28 функций сравнения, можно обойтись только теми, что работают с разными типами данных и дополнительно передавать поле, по которому структуры сравниваются. Функции вполне можно сделать универсальными. На Плюсах можно было б закаррировать в лямбде, на Cях посложнее. Но что-то типа (не тестировал&#33;):<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const void *search(const void *key, const void *data, size_t count, size_t size,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int (*comp)(const void*, const void*, size_t), size_t offset)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;const unsigned char* it, *end = (const unsigned char*)data + size*count;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for (it = data; it &#60; end; it += size)</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (comp(it, key, offset) != 0) break;</div><div class="code_line">&nbsp;&nbsp;return it &#60; end ? it : NULL;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">typedef struct Car</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;char &nbsp; &nbsp; &nbsp; &nbsp;*mark; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// марка</div><div class="code_line">&nbsp;&nbsp;char &nbsp; &nbsp; &nbsp; &nbsp;*country; &nbsp; &nbsp; &nbsp; &nbsp; // страна-производитель</div><div class="code_line">&nbsp;&nbsp;double &nbsp; &nbsp; &nbsp; price; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // цена в млн.руб.</div><div class="code_line">&nbsp;&nbsp;unsigned int max_speed; &nbsp; &nbsp; &nbsp; // максимальная скорость</div><div class="code_line">&nbsp;&nbsp;/* ...*/</div><div class="code_line">} Car;</div><div class="code_line">&nbsp;</div><div class="code_line">int comp_double(const void *left, const void* right, size_t offs)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;const double *l = (const double*)((const unsigned char*)left + offs),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *r = (const double*)right;</div><div class="code_line">&nbsp;&nbsp;return *l == *r;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int comp_unsigned_int(const void *left, const void* right, size_t offs)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;const unsigned int *l = (const unsigned int*)((const unsigned char*)left + offs),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *r = (const unsigned int*)right;</div><div class="code_line">&nbsp;&nbsp;return *l == *r;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int comp_char_ptr(const void *left, const void* right, size_t offs)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;const char *l = (const char*)((const unsigned char*)left + offs),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *r = (const char*)right;</div><div class="code_line">&nbsp;&nbsp;return strcmp(l, r) == 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">Car array[ARRAY_SIZE];</div><div class="code_line">&nbsp;</div><div class="code_line">void f(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;double &nbsp; dummy1 = 200000.0/1000000;</div><div class="code_line">&nbsp;&nbsp;unsigned dummy2 = 250;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;const Car *myCar &nbsp; &nbsp; &nbsp; &nbsp;= search(&quot;Корыто&quot;, array, ARRAY_SIZE, sizeof (*array), comp_char_ptr, &nbsp; &nbsp;offsetof(Car, mark));</div><div class="code_line">&nbsp;&nbsp;const Car *myFavorSeller= search(&quot;Россия&quot;, array, ARRAY_SIZE, sizeof (*array), comp_char_ptr, &nbsp; &nbsp;offsetof(Car, country));</div><div class="code_line">&nbsp;&nbsp;const Car *myMountlyPay = search(&amp;dummy1, &nbsp;array, ARRAY_SIZE, sizeof (*array), comp_double, &nbsp; &nbsp; &nbsp;offsetof(Car, price));</div><div class="code_line">&nbsp;&nbsp;const Car *myFavorSpeed = search(&amp;dummy2, &nbsp;array, ARRAY_SIZE, sizeof (*array), comp_unsigned_int,offsetof(Car, max_speed));</div><div class="code_line">&nbsp;&nbsp;/* ...*/</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867225</guid>
        <pubDate>Thu, 02 Jun 2022 11:10:34 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867225</link>
        <description><![CDATA[Qraizer: bsearch(), qsort(). Они принимают указатель на функцию сравнения, которую можно написать как требуется]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867206</guid>
        <pubDate>Thu, 02 Jun 2022 07:41:33 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867206</link>
        <description><![CDATA[OpenGL: Шо, опять автомобили? <a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=419028' target='_blank'>В прошлой теме</a> уже же объяснили, что ты решаешь задачу, правильный метод решения которой это &quot;взять БД&quot;. Да хоть sqlite бери, который с полпинка где угодно заведётся.<br>
Ну и постановка странная достаточно. &quot;Поиск по цене&quot; - это что, например? Практически всегда интересует диапазон цен, а значит у тебя у функций принципиально разные сигнатуры будут, а не просто втупую &quot;выполняем поиск по полю функцией, принимающей значение этого поля&quot;.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867200</guid>
        <pubDate>Thu, 02 Jun 2022 07:02:25 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867200</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=427672&view=findpost&p=3867191'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2022-06-02T01:36:07+00:00">02.06.22, 01:36</time></span><div class='quote '>или все-таки все совсем по-другому можно реализовать?)</div></div><br>
Как правильно заметил <strong class='tag-b'>shm</strong> - лучше использовать готовые решения. И время сэкономишь, и кому-то иному твой код будет гораздо понятнее. В качестве инструмента, если не ориентироваться на внешние СУБД, можно использовать SQLite. А если нужны скоростные операции, SQLite может размещать свои данные в памяти. Плюс ко всему получаешь полноценный язык запросов SQL.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867199</guid>
        <pubDate>Thu, 02 Jun 2022 06:53:49 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867199</link>
        <description><![CDATA[shm: <strong class='tag-b'>FasterHarder</strong>, ты пытаешься изобрести СУБД? Все эти проблемы давно решены в них. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-06-02T07:00:48+00:00">02.06.22, 07:00</time></span></span><br>
В плюсах это можно сделать на шаблонах без дублирования кода. В чистом Си тут можно что-нибудь с макросами придумать, хотя будет не очень красиво и потенциально опасно. Еще можно сделать обертку на уровне смещений полей в структуре, но т.к. поля разные, то и функций все равно придется делать несколько (потом можно обернуть во что-то более высокоуровневое).]]></description>
        <author>shm</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867191</guid>
        <pubDate>Thu, 02 Jun 2022 01:36:07 +0000</pubDate>
        <title>Поиск по заданному полю большой структуры</title>
        <link>https://forum.sources.ru/index.php?showtopic=427672&amp;view=findpost&amp;p=3867191</link>
        <description><![CDATA[FasterHarder: Всем хай&#33;<br>
<br>
Допустим, есть сущность &quot;Автомобиль&quot;, состоящая из 28 полей ( в примере приведу лишь первые 4 шт. ):<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">typedef struct Car</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;char* mark; &nbsp; &nbsp; &nbsp; &nbsp; // марка</div><div class="code_line">&nbsp;&nbsp; &nbsp;char* country; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// страна-производитель</div><div class="code_line">&nbsp;&nbsp; &nbsp;double price; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // цена в млн.руб.</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned int max_speed; &nbsp; &nbsp; // максимальная скорость</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">} Car;</div></ol></div></div></div></div><br>
<br>
И вот должна быть возможность поиска по ЛЮБОМУ полю авто, т е по марке, по цене и т.п. Напомню, что всего 28 полей.<br>
А почему бы просто не реализовать 28 &quot;похожих&quot; функций, типа такого:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void Search_mark( ... );</div><div class="code_line">void Search_country( ... );</div><div class="code_line">void Search_price( ... );</div><div class="code_line">...</div></ol></div></div></div></div><br>
<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red"><strong class='tag-b'>Это ведь приемлемый вариант для языка Си ( стандарта С89-90 ), верно?</strong></span> :)<br>
<br>
С др.стороны можно все засунуть в ОДНУ поисковую функцию и там поставить switch. На мой взгляд это архинегибко. Гораздо удобнее иметь 28 маленьких функций, чем одну огромную ( неповоротливую функцию-годзиллу ) с выбором.<br>
<br>
спс. за внимание <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-06-02T01:42:55+00:00">02.06.22, 01:42</time></span></span><br>
кстати, еще ведь надо данные сортировать также по ЛЮБОМУ полю<br>
думаю, что это еще +28 функций), но сортировка будет индексной, чтобы не сбивать первоначальное расположение данных<br>
в одну общую функцию засовывать все возможные сортировки - вроде абсолютно плохая идея<br>
<br>
итого на поиски и на сортировки потребуется 56 функций...<br>
или все-таки все совсем по-другому можно реализовать?)]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	