На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Отсортировать vector , может sort()
    ExpandedWrap disabled
      typedef struct _MyStruct
      {
      CString name;
      CString fio;
      }MyStruct;
       
      std::vector<MyStruct> vec;



    Как отсортировать элементы вектора в алфавитном порядке по полю name?
    Прочитал вроде бы sort() для этого нужен,но не могу найти пример использования :(
      Как-то так:
      ExpandedWrap disabled
        bool CompareStructs( MyStruct m1, MyStruct m2 )
        {
          return m1.name < m2.name;   // насколько помню, надо возвращать true, если первый меньше второго
        }
         
        // сортируем
        sort( vec.begin(), vec.end(), CompareStructs );
        У меня выдает ошибку

        Цитата

        c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1863): error C2064: term does not evaluate to a function taking 2 arguments

        ExpandedWrap disabled
          std::sort( vec.begin(), vec.end(),CompareStruct(vec.at(j),vec.at(j+1)));


        Добавлено
        Все понял в чем дело , у меня то было что-то в этом роде
        ExpandedWrap disabled
          for (size_t j=0;j<vec.size()-1;j++)
          std::sort( vec.begin(), vec.end(),CompareStruct(vec.at(j),vec.at(j+1)));


        А нужно сделать CompareStruct как глобальную ф-ию

        ExpandedWrap disabled
          std::sort( vec.begin(), vec.end(), CompareStruct);
          vint, тебе же сказали, надо так:
          Цитата KAV @
          // сортируем
          sort( vec.begin(), vec.end(), CompareStructs );

          Тебе надо передать саму функцию, а не результат ее вызова.
            по-моему надо вот так:
            ExpandedWrap disabled
              bool operator < (const MyStruct& m1,const MyStruct& m2 )
              {
                return m1.name < m2.name;  
               }
              sort(vec.begin(),vec.end());
              Можно и нак и так. Насколько я помню есть два варианта std::sort, один использует оператор сравнения, другой - переданную ему параметром функцию. Думаю в данном случае второй лучше, так как не перегружает оператор стравнения

              Добавлено
              Хотя всё же лучше передавать в функцию сравнения ссылку (константную).
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0245 ]   [ 16 queries used ]   [ Generated: 3.05.24, 11:25 GMT ]