valker's blog

valker's blog: идеи, размышления, наблюдения

C++ : Сортировка вектора структур

with one comment

На RSDN пробежал такой вопрос:

Привет, наверняка есть решение с помощтю STL такой задачи:

есть структура

struct Data

{

    int a;

    LPCTSTR str;

};

и есть вектор

std::vector<Data> v;

нужно сделать сортировку по полю str, при условии что сравнение должна выполнять некоторая моя специализированная функция.

как реализовать?

Вот что у меня получилось:

#include «stdafx.h»

// определение вектора

#include <vector>

// определение сортировки

#include <algorithm>

// определение ptr_fun

#include <functional>

// определение LPCTSTR и lstrcmp

#include <windows.h>

// исходная структура

struct Data

{

    int a;

    LPCTSTR str;

};

// каноническая сигнатура функции сортировщика

bool special_sort_function(const Data& left, const Data& right) {

    // перенаправляем вызов в Win32-API

    return lstrcmp(left.str, right.str) < 0;

}

int _tmain(int argc, _TCHAR* argv[])

{

    std::vector<Data> v;

    Data data;

    // заполняем вектор данными

    data.str = _T(«alfa»);  v.push_back(data);

    data.str = _T(«omega»); v.push_back(data);

    data.str = _T(«123»);   v.push_back(data);

    // сейчас в векторе:

    // [0] 0,»alfa»

    // [1] 0,»omega»

    // [2] 0,»123″

    std::sort(v.begin(),

              v.end(),

              std::ptr_fun(special_sort_function));

    // после сортировки в векторе:

    // [0] 0,»123″

    // [1] 0,»alfa»

    // [2] 0,»omega»

    return 0;

}

Written by valker

Июнь 27, 2007 в 11:10 дп

Опубликовано в жизнь

Один ответ

Subscribe to comments with RSS.

  1. Спасибо, помогло в изучении основ STL🙂

    Mr. Grey

    Май 19, 2008 at 7:59 пп


Добавить комментарий

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: