PDA

View Full Version : سوال: مرتب سازی آرایه ای از struct ها



farbehar1
جمعه 05 دی 1393, 23:24 عصر
با سلام خدمت دوستان گرامی
اگر امکانش هست بنده را راهنمایی بفرمایید که چگونه میتوان آرایه ای از ساختار ها را برحسب یکی از عناصر داخلی اش مرتب کرد؟
مثلا در قطعه کد زیر



#include <iostream>
using namespace std;
struct a
{
int num1;
char L[10];
};




int main()
{
a daneshju [3];
for ( int i=0;i<3;i++)
{
cin>>daneshju[i].num1;
cin>>daneshju[i].L;
}




//


bool swapped = true;
int j = 0;
int tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < 3 - j; i++) {
if (daneshju[i].num1 > daneshju[i + 1].num1) {
tmp = daneshju[i].num1;
daneshju[i].num1 = daneshju[i + 1].num1;
daneshju[i + 1].num1 = tmp;
swapped = true;
}
}
}




for ( int i = 0; i < 3 ; i++) {
cout<<daneshju[i].num1<<"\t"<<daneshju[i].L<<"\n";
}
}





میخواهم ساختار a را بر حسب مقادیر num1 مرتب کنم و در انتها زمانی که چاپ میشود هر num1 با L مرتبط با خودش چاپ شود
در این کدی که من نوشته ام اگر ورودی ها
1
a

3
c

2
b

باشد ، اعداد مرتب میشوند اما کاراکتر ها در جای اولیه شان میمانند و ساختار بهم میریزد ، و خروجی این میشود :
1
a

2
c

3
b

در حالی که من خواهان این هستم که عدد و کاراکتری که با هم وارد شده اند در انتها با هم چاپ شوند.
پیشاپیش از پاسخ های شما سپاسگذارم.

rahnema1
جمعه 05 دی 1393, 23:59 عصر
سلام، با هدر algorithm و تابع sort

#include <iostream>
#include <algorithm>
struct a
{
int num1;
std::string L;
operator < (const a& other){return this->num1 < other.num1;}
};
int main()
{
std::vector<a> daneshju(3);
for ( auto && d:daneshju)
{
std::cin >> d.num1;
std::cin >> d.L;
}
std::sort(daneshju.begin(), daneshju.end());
for ( auto && d:daneshju)
{
std::cout << d.num1 << "\t" << d.L << "\n";
}
}

farbehar1
شنبه 06 دی 1393, 00:06 صبح
سلام، با هدر algorithm و تابع sort

#include <iostream>
#include <algorithm>
struct a
{
int num1;
std::string L;
operator < (const a& other){return this->num1 < other.num1;}
};
int main()
{
std::vector<a> daneshju(3);
for ( auto && d:daneshju)
{
std::cin >> d.num1;
std::cin >> d.L;
}
std::sort(daneshju.begin(), daneshju.end());
for ( auto && d:daneshju)
{
std::cout << d.num1 << "\t" << d.L << "\n";
}
}

تشکر
اما پیچیده شد من نمیتونم متوجه بشم!
کمپایلر هم خطا میگیره زیاد

farbehar1
شنبه 06 دی 1393, 00:21 صبح
مشکل حل شد

با تغییر قطعه کد

if (daneshju[i].num1 > daneshju[i + 1].num1) {
tmp = daneshju[i].num1;
daneshju[i].num1 = daneshju[i + 1].num1;
daneshju[i + 1].num1 = tmp;
swapped = true;
}



به


if (daneshju[i].num1 > daneshju[i + 1].num1) {
struct a tmp = daneshju[i];
daneshju[i] = daneshju[i + 1];
daneshju[i + 1] = tmp;
swapped = true;
}


تشکر از rahnema1 به دلیل صرف وقت.