Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка вектора 
:(
    Опции темы
Berkut
Дата 13.4.2004, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.3.2004

Репутация: нет
Всего: нет



Как отсортирвать вектор типа структура:
struct A
{
int x,y;
}

vector<A> abc;


abc.sort( ?????????
например по полю х.
hmmm.gif
PM MAIL   Вверх
mr.DUDA
Дата 13.4.2004, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Есть два варианта.
Первый: сортировка с помощью единственного оператора сравнения, встраиваемого в класс (тогда нельзя будет выбрать, по какому полю сортировать и т.п.):
Цитата
struct A
{
  int x,y;
  A(int ax, int ay): x(ax), y(ay) {}

  bool operator<(A &ob) {return x<ob.x;}
};

void main()
{
  vector<A> abc;
  abc.push_back(A(1,300));
  abc.push_back(A(2,200));
  abc.push_back(A(3,100));

  sort(abc.begin(), abc.end());
}


Второй вариант - более гибкий, с использованием 3-го аргумента функции "sort" (функциональный объект либо указатель на сравнивающую функцию):
Цитата
struct A
{
  int x,y;
  A(int ax, int ay): x(ax), y(ay) {}
};

bool cmp_A_by_x(A &first, A &second) {return first.x<second.x;}
bool cmp_A_by_y(A &first, A &second) {return first.y<second.y;}

void main()
{
  vector<A> abc;
  abc.push_back(A(1,300));
  abc.push_back(A(2,200));
  abc.push_back(A(3,100));

  // отсортируем сначала по полю x, потом - по полю y
  sort(abc.begin(), abc.end(), cmp_A_by_x);
  sort(abc.begin(), abc.end(), cmp_A_by_y);
}



--------------------
user posted image
PM MAIL WWW   Вверх
Berkut
Дата 13.4.2004, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.3.2004

Репутация: нет
Всего: нет



Сделал вторым способом, но вот такая ошибка появляется:
error C2039: 'sort' : is not a member of 'vector<struct A,class std::allocator<struct A> >' omg.gif
PM MAIL   Вверх
sergejzr
Дата 13.4.2004, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



mr.DUDA
Неплохо! А алгоритм сортировки можно указать?

Это сообщение отредактировал(а) sergej.z - 13.4.2004, 16:29


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Berkut
Дата 13.4.2004, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.3.2004

Репутация: нет
Всего: нет



omg.gif
PM MAIL   Вверх
achmed
Дата 13.4.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 12.4.2004

Репутация: нет
Всего: нет



очевидно вы пишите abc.sort() вместо sort(abc.begin(),end()), у vector нет встроеного вектора
сортировки, вместо этого исп-ся std::sort - для для итераторов произвольного доступа
PM MAIL   Вверх
Berkut
Дата 13.4.2004, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.3.2004

Репутация: нет
Всего: нет



smile.gif спасибо achmed mr.DUDA

PM MAIL   Вверх
mr.DUDA
Дата 13.4.2004, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Да, кстати совсем забыл напомнить - для удобства записи, в моём примере используются "сокращённые" имена STL:
Цитата
#include <vector>
#include <algorithm>

using namespace std;

// ...
// теперь вместо std::sort можно писать просто sort и т.д.

Добавлено @ 18:26
2 sergej.z,
Алгоритм сортировки сильно зависит от реализации STL. Это может быть как простейшая "пузырьковая" сортировка, так и более навёрнутый алгоритм.



--------------------
user posted image
PM MAIL WWW   Вверх
Fantasist
Дата 14.4.2004, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
Это может быть как простейшая "пузырьковая" сортировка, так и более навёрнутый алгоритм.


Обычно это все-таки quick sort, как я думаю. C другой стороны, не сложно и свой sort написать.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.