Форум программистов, компьютерный форум CyberForum.ru

Сортировка массива структур... - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Разделить строку на слова. http://www.cyberforum.ru/cpp-beginners/thread98315.html
В общем есть строка, и ее надо разбить на массив строк чтобы каждое слово было в ствоей строке. Знаю что надо пользоваться strstr но в виду неопытности даже не знаю как сделать...
C++ двухмерный массив Не получается сделать что бы все 4 символа ходили по массиву рендом, если не трудно подскажите. #include <iostream> #include <iomanip> #include <cstdio> #include <cstdlib> void Flip(char& x, char& y){ char temp = x; x = y; http://www.cyberforum.ru/cpp-beginners/thread98303.html
C++ использование assemblera в С++
Здравствуйте, господа программисты. С ассемблером раньше не сталкивался. Поэтому нужна помощь. В коде С++ нужно сделать ассемблеровскую вставку. В ней должно рассчитываться арифметическое выражение. (9-(b+2)^2)/(b^2+10*b+25^3) Заранее спасибо)
простой класс C++
покажите пожалуйста самую простою классу, корорый показывает "Hello World"
C++ ошибка компиляции в Borland C++ 3.1 http://www.cyberforum.ru/cpp-beginners/thread98272.html
Есть задание, сделать что то на подобии оконной библиотеки иль тип того...в общем класс по работе с окнами в консоли (можно создавать произвольные окна, закрывать их и т.п.). Делаем это пока в Borland C++ 3.1, т.к. там проще всего выводить графику в консоли (через реальный режим процессора мона напрямую одресовать видеопамять и выводить псевдографику). Собственно вот недоделаный код main.cpp...
C++ Определите наибольший общий делитель чисел Привет,всем!!!Я учусь в колледже информатики и мы только начали изучать Си и нам дали электронную контрольную работу,но когда я отправляю свои решения он говорит,что решено не правильно,поэтому прошу у вас помощи ведь отправить надо сегодня до 6 часов вечера!За ранее спасибо и с праздником!!! 1) Дано трёхзначное число. В нём зачеркнули последнюю справа цифру и приписали ее в начало. Найти... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
23.02.2010, 16:20     Сортировка массива структур...
Теперь о сортировке std::sort. Для неё надо определить операцию сравнения. Чтобы сортировать индекс, надо показать sort, что сравнивать надо не сами элементы индекса, а соответствующие им элементы основного массива. Хотя перемещаются при этом именно элементы индекса. Для этого надо написать класс с операцией вызова, в которой заложено нужное сравнение, и передать его в sort.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
struct MyStruct {double x, y;};
MyStruct A[10];  // Будем считать, что массив где-то заполняется
int IndexX[10], IndexY[10];
 
void DoSort()
{
    for(int i=0; i<10; ++i)
        IndexY[i] = IndexX[i] = i;   // Начальные значения для индексов
    // Определим класс для сравнения MyStruct.x
    class CompareX {
    public:
        CompareX(const MyStruct *Array): arr(Array) {}  // Сравниватель должен знать, с каким именно массивом работает
        bool operator () (const int& i1, const int& i2)  const   // А это сама операция сравнения
        {
            return arr[i1].x < arr[i2].x;
        }
    private:
        const MyStruct* const arr;
    } ;
    // Определим класс для сравнения MyStruct.y
    class CompareY {
    public:
        CompareY(MyStruct *Array): arr(Array) {}  // Сравниватель должен знать, с каким именно массивом работает
        bool operator () (const int& i1, const int& i2)  const   // А это сама операция сравнения
        {
            return arr[i1].y < arr[i2].y;
        }
    private:
        const MyStruct* const arr;
    } ;
// А теперь просто отсортируем индексы
    std::sort(IndexX, IndexX+10, CompareX(A));
    std::sort(IndexY, IndexY+10, CompareY(A));
// А теперь напечатаем отсортированные последовательности:
    for(int i=0; i<10; ++i)
        cout << "A[" << IndexX[i] << "].x = " << A[IndexX[i]].x << endl;
    for(int i=0; i<10; ++i)
        cout << "A[" << IndexY[i] << "].y = " << A[IndexY[i]].y << endl;
}
Вот, таким образом у тебя имеется один и тот же массив A, благодаря индексам отсортированный двумя разными способами.
 
Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru