כותב |
|
rosberry משתמש מתחיל
הצטרף / הצטרפה: 14 August 2006
משתמש: מנותק/ת הודעות: 12
|
נשלח בתאריך: 14 August 2006 בשעה 12:38 | | IP רשוּם
|
|
|
|
שלום
אני סטודנטית שנה ראשונה במחשבים אני מנסה לבנות רשימה בעזרת STL אני עובדת בC++
הרשימה מורכבת מCLASS שמכיל שמות של מתקנים מיקומם וכו
רציתי לדעת האם יש אופצייה למיין את הרשימה הזו לפי שם המתקן הוא מורכב מSTRING
וכיצד אני יכולה לשנות את המיון של הרשימה הזו לפי הצרכים שלי (פעם למיין לפי שם פעם לפי קוד וכו)
האם יש דרך לעשות זאת או שאני צריכה לממש את זה בלי STL
ניסתי לעבוד בעזרת SORT אבל אני לא מבינה איך כותבים את operator < בשביל הרשימה.
תודה רבה מראש
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 14 August 2006 בשעה 13:06 | | IP רשוּם
|
|
|
|
לא ממש הבנתי מה את עושה. הגדרת מחלקה משלך, נגיד cls, ואז יצרת רשימה,
נגיד list<cls>mylist, ועכשיו את רוצה למיין אותה בעזרת sort?
המממ. no can do. הפונקציה sort לא תמיין לך רשימות, כמו שכתוב כאן:
The sort algorithm is an operation (function) that can be applied to many STL
containers (with the notable exception of the list container).
|
חזרה לתחילת העמוד |
|
|
rosberry משתמש מתחיל
הצטרף / הצטרפה: 14 August 2006
משתמש: מנותק/ת הודעות: 12
|
נשלח בתאריך: 14 August 2006 בשעה 13:21 | | IP רשוּם
|
|
|
|
לא נראה לי שווקטור מתאים בעקרון אני צריכה לבנות רשימה של CLASS מסוג MAIL
unsigned int destAddrees[32]; unsigned int sourceAddrees[32]; double kg; double price; Date arrival_time; Date sent_time; bool express; bool collect; bool replay; bool anotherContinent; bool anotherCountry;
string name;
אלה המשתנים שישי לי שם ואני רוצה את הרשימה להחזיק ממויינת לפי name או לפי sourceAddrees השאלה שלי היא איך אפשר לישם את זה ?????? כמובן שאני רוצה להיות גם מסוגלת לשלוף מהרשימה את שאר הנתונים.
בקיצור איך אני יכולה לעשות את זה???
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 14 August 2006 בשעה 13:42 | | IP רשוּם
|
|
|
|
ולמה נראה לך ש-vector לא מתאים כאן?
הדרך הנכונה לעשות את מה שאת רוצה היא להשתמש ב-vector, וליצור מחלקה נוספת שתשמש למיון. קראי כאן על sort.
|
חזרה לתחילת העמוד |
|
|
rosberry משתמש מתחיל
הצטרף / הצטרפה: 14 August 2006
משתמש: מנותק/ת הודעות: 12
|
נשלח בתאריך: 14 August 2006 בשעה 13:52 | | IP רשוּם
|
|
|
|
תודה רבה אני מקווה שמכאן אני הסתדר לבד
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 14 August 2006 בשעה 14:33 | | IP רשוּם
|
|
|
|
VECTOR ממיין רק מספרים לא? אפילו אם עושים לו <string> ?
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 14 August 2006 בשעה 15:18 | | IP רשוּם
|
|
|
|
vector לא ממיין כלום. הפונקציה sort ממיינת, והקריטריון ע"פיו היא ממיינת נקבע ע"י המתכנת. קשה לרפרף על הלינק שהבאתי לה למעלה?
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 14 August 2006 בשעה 23:40 | | IP רשוּם
|
|
|
|
אוקי אז אם אני מגדיר VECTOR ככה:
ומנסה לעשות :
קוד:
sort(vec.begin(),vec.end()); |
|
|
SORT
למה אני לא מצליח? ואיך הקוד אמור להראות בשביל שהוא יצליח למיין וקטור של STRINGS?
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 15 August 2006 בשעה 00:05 | | IP רשוּם
|
|
|
|
אתה "לא מצליח"? מעניין. למה אתה מתכוון בזה?
אתה מקבל הודעה שגיאה בקימפול?
אם כן, אתה מבין מה היא אומרת?
|
חזרה לתחילת העמוד |
|
|
סליחה על מקודם אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 August 2006 בשעה 00:28 | | IP רשוּם
|
|
|
|
קוד:
using namespace std;
int main() { vector<string> vec; vec.push_back("da"); vec.push_back("ab"); vec.push_back("ca"); sort(vec.begin(),vec.end()); cout << endl << "Sorted.." << endl << endl; return 0; }
|
|
|
זה מביא לי את הERROR הבא (יש לציין שאני משתמש ב VC++6)
קוד:
Compiling... StdAfx.cpp Compiling... Testz.cpp C:\Documents and Settings\Nab\ùåìçï äòáåãä\Testz\Testz.cpp(17) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::cha r_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std ::allocator<char> >, std::basic_string<char,std::char_traits<char>,std:: allocator<char> > const &, std::basic_string<char,std::char_traits<char>,std:: allocator<char> > const *,int>' : identifier was truncated to '255' characters in the debug information C:\Documents and Settings\Nab\ùåìçï äòáåãä\Testz\Testz.cpp(17) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::cha r_traits<char>,std::allocator<char> > *,std::basic_string<char,std::char_traits<char>,std ::allocator<char> >,std::b asic_string<char,std::char_traits<char>,std::alloca tor<char> > &, std::basic_string<char,std::char_traits<char>,std:: allocator<char> > *,int>' : identifier was truncated to '255' characters in the debug information d:\program files\microsoft visual studio\vc98\include\algorithm(583) : error C2784: 'bool __cdecl std::operator <(const class std::vector<_Ty,_A> &,const class std::vector<_Ty,_A> &)' : could not deduce template argument for 'const class std::vector <_Ty,_A> &' from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' d:\program files\microsoft visual studio\vc98\include\algorithm(548) : see reference to function template instantiation 'void __cdecl std::_Unguarded_insert(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char > > *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' being compiled d:\program files\microsoft visual studio\vc98\include\algorithm(583) : error C2784: 'bool __cdecl std::operator <(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce te mplate argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' d:\program files\microsoft visual studio\vc98\include\algorithm(548) : see reference to function template instantiation 'void __cdecl std::_Unguarded_insert(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char > > *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' being compiled d:\program files\microsoft visual studio\vc98\include\algorithm(583) : error C2784: 'bool __cdecl std::operator <(const struct std::pair<_T1,_T2> &,const struct std::pair<_T1,_T2> &)' : could not deduce template argument for 'const struct std::pair< _T1,_T2> &' from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' d:\program files\microsoft visual studio\vc98\include\algorithm(548) : see reference to function template instantiation 'void __cdecl std::_Unguarded_insert(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char > > *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' being compiled d:\program files\microsoft visual studio\vc98\include\algorithm(583) : error C2676: binary '<' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' does not define this operator or a conversion to a type accept able to the predefined operator d:\program files\microsoft visual studio\vc98\include\algorithm(548) : see reference to function template instantiation 'void __cdecl std::_Unguarded_insert(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char > > *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' being compiled Error executing cl.exe.
Testz.exe - 4 error(s), 2 warning(s)
|
|
|
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 August 2006 בשעה 00:29 | | IP רשוּם
|
|
|
|
נ.ב אלה הספריות: #include <iostream> #include <vector> #include <cstring> #include <algorithm> שיש בהתחלה.. שכחתי להוסיף ואין לי עריכה!! מאוד מצטער על הבלאגן
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 15 August 2006 בשעה 00:47 | | IP רשוּם
|
|
|
|
אצלי הקוד הזה פועל אצלי מצויין.
קודם כל, מהאזהרות על האורך תתעלם. (אתה יכול גם להוסיף pragma שתבטל אותן
וזהו).
עכשיו, אתה שם לב שחסר לך אינקלוד ל-<string>?
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 August 2006 בשעה 02:05 | | IP רשוּם
|
|
|
|
עשיתי cstring זה לא אותו דבר? אמרו לי שאם יורשים מC אז שמים C לפני..
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 August 2006 בשעה 02:11 | | IP רשוּם
|
|
|
|
אוקי בקשר לאזהרות על ה"אורך" כפי שאמרת, ממה הם נובעות ואיך אפשר להיפטר מהן?
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 15 August 2006 בשעה 03:12 | | IP רשוּם
|
|
|
|
אבל אתה לא רוצה את הפונקציות של C. אתה רוצה את המחלקות של CPP.
כדי לבטל את האזהרה של האורך שים
קוד:
#pragma warning (disable: 4786) |
|
|
וכדאי שתירשם.
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 August 2006 בשעה 12:44 | | IP רשוּם
|
|
|
|
cstring זה לא כמו string? <string> <cstring>?!?!?!
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 15 August 2006 בשעה 12:57 | | IP רשוּם
|
|
|
|
לא. זה לא אותו דבר. אלה הם שני קבצי כותר שאין ביניהם שום קשר, מלבד
הדימיון בשם. <cstring> הוא הגרסה ה-CPP-ית ל-<string.h> של הספריה הסטנדרטית של C, בעוד ש-<string> הוא קובץ כותר של הספריה הסטנדרטית של CPP.
המחלקה string מוגזרת ב-<string>, ורק שם. ב-<cstring>
מוגדרות פונקציות כמו strlen, strcpy, וכו'. לא קשור לעניין. את כל זה
יכלת למצוא אם היית עושה חיפוש על המילים "string cstring". במקרה כזה, היית מוצא את האשכול הזה, עם ההסבר:
אלצ'קו כתב:
מה שכן, שים לב שאתה לא נוגע ב-string.h, שזו הספריה של C, אלא משתמש
ב-string, קובץ שונה לחלוטין. התקן של CPP קובע שלקבצי האינקלוד של הספריה
הסטנדרטית אין סיומת h. לדוגמה: iostream, string, vector וכו'.
string.h כולל פונקציות מוכרות מ-C כמו strcat ו-strlen (ראה פירוט מלא כאן), אבל לא קשור אלינו ב-CPP.
בנוסף, שים לב שקבצי הספריה הסטנדרטית של C משנים את שמם ב-CPP. קובץ בשם
file.h מהספריה הסטנדרטית של C ייקרא cfile ב-CPP - בלי סיומת h ועם
התחילית c. כך math.h, time.h, ו-stdlib.h הופכים ל-cmath, ctime
ו-cstdlib בהתאמה ב-CPP. באותו אופן string.h הופך ל-cstring, אבל שוב זה לא קשור אליך ב-CPP. אתה צריך להשתמש ב-string הנקי והבטוח.
|
|
|
|
חזרה לתחילת העמוד |
|
|