сортировать массив массивов в C ++

0

У меня есть массив Struct и он пытается отсортировать их по алфавиту по lname, я попробовал сортировку пузырьков, но когда у нас есть какие-то пустые элементы в нашем массиве, пузырь сортировки не будет работать правильно. Есть ли какая-либо функция для сортировки этих элементов?

Это мой код:

#include<iostream>
#include<algorithm>

using namespace std;


struct user {

char lname[30];
int userid;
};

user libuser[1000];

int main(){


strcpy(libuser[0].lname,"");
libuser[0].userid = 0;


strcpy(libuser[1].lname,"backzade");
libuser[1].userid = 1;

strcpy(libuser[2].lname,"akhondali");
libuser[2].userid = 2;

    strcpy(libuser[3].lname,"sayidian");
libuser[3].userid = 3;

    strcpy(libuser[4].lname,"navah");
libuser[4].userid = 4;

    strcpy(libuser[5].lname,"mostarab");
libuser[5].userid = 5;


libuser[6].userid = 0;


    strcpy(libuser[7].lname,"");
libuser[7].userid = 0;

    strcpy(libuser[8].lname,"");
libuser[8].userid = 0;

    strcpy(libuser[9].lname,"borobaba");
libuser[9].userid = 9;

    strcpy(libuser[10].lname,"divune");
libuser[10].userid = 10;



for(int i=1;i<1000;i++)
    if(libuser[i].userid!=0)
        cout<<libuser[i].lname<<"\n";


system("PAUSE");

return 0;
}
  • 0
    Вам нужно каким-то образом сказать, какие элементы массива используются. Как переменная счетчика или инициализировать все неиспользуемые элементы для userid=0 .
  • 2
    Почему бы не использовать qsort ?
Показать ещё 5 комментариев
Теги:
arrays
struct
sorting

2 ответа

5

Этот код может быть одним из многих методов. Я просто использую std::sort и лямбда. Надеюсь, это поможет вам немного. С новым годом!

std::sort (std::begin(libuser), std::end(libuser), [&](const user& first, const user& second) -> bool
{
    return (first.lname[0] < second.lname[0]); 
});
1
#include <iostream>
#include <algorithm>

using namespace std;

struct user
{
    char lname[30];
    int userid;
};

user libuser[1000];
int elementCount = 0;

int main()
{
    strcpy(libuser[0].lname,"");
    libuser[0].userid = 0;

    strcpy(libuser[1].lname,"backzade");
    libuser[1].userid = 1;

    strcpy(libuser[2].lname,"akhondali");
    libuser[2].userid = 2;

    strcpy(libuser[3].lname,"sayidian");
    libuser[3].userid = 3;

    strcpy(libuser[4].lname,"navah");
    libuser[4].userid = 4;

    strcpy(libuser[5].lname,"mostarab");
    libuser[5].userid = 5;

    libuser[6].userid = 0;

    strcpy(libuser[7].lname,"");
    libuser[7].userid = 0;

    strcpy(libuser[8].lname,"");
    libuser[8].userid = 0;

    strcpy(libuser[9].lname,"borobaba");
    libuser[9].userid = 9;

    strcpy(libuser[10].lname,"divune");
    libuser[10].userid = 10;

    //sort
    for(int i = 0; i < 1000; i++)
    {
        for(int j = 0; j < 1000 - 1; j++)
        {
            if(strcmp(libuser[j].lname, libuser[j + 1].lname) > 0)  //change to < 0 for descending sort
            {
                user temp = libuser[j];
                libuser[j] = libuser[j + 1];
                libuser[j + 1] = temp;
            }
        }
    }


    for(int i = 1; i < 1000; i++)
    {
        if(libuser[i].userid!=0)
        {
            cout<<libuser[i].lname<<"\n";
        }
    }


    system("PAUSE");

    return 0;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню