J_lle Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 Jeg har et map<string, int> og trenger å sortere det etter integerene.. Hvordan? Lenke til kommentar
☀ ❄ Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 Ved å gjøre det om til et map<int, std::string> i stedet. Lenke til kommentar
J_lle Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 Du kødder!! :!: Hvorfor står du opp halv sju myubi? har du ikke ferie? og hva har skjedd med mputt? Lenke til kommentar
☀ ❄ Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 Hirr. Det var deg, ja Må opp tidlig for å få gjort noe, vet du Selv om jeg er stor fan av And when wizards stay up late, new worlds are born så er det jo litt koselig å se dagslys innimellom også. Filsystemet på root-partisjonen til mputt døde her en dag, så jeg installerte Ubuntu som en nødløsning. Har ikke giddet å sette opp sshd eller httpd ennå, men skal gjøre det når jeg får på plass Gentoo igjen. Hjemmeområdet ditt lever forresten fortsatt i beste velgående, så du kan ta det helt rolig på den fronten Hvordan går det med kodingen? Lenke til kommentar
J_lle Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 (endret) heh.. bra det.. Joda, jeg driver så vidt på.. Men har litt for lite tid om dagen. Tar seg nok opp fremover.. Har kommet i gang med Python også, men det er mere et sideprosjekt.. Men du.. 1: ofstream fout(fname.c_str()); Det tømmer også fila for alt innhold.. har jeg beklageligvis *oppdaga* Hvordan forhindrer jeg det? 2: while (getline(fin, str)) { split(str, m); } 'fin' er file in ja.. og i split: typedef string::const_iterator iter; iter f_s = str.begin(); f_s = find_if(f_s, str.end(), not_space); iter f_e = find_if(f_s, str.end(), space); iter s_s = find_if(f_e, str.end(), not_space); iter s_e = find_if(s_s, str.end(), space); m.insert(make_pair(string(f_s, f_e), string(s_s, s_e))); Men map'et er jo map<int, std::string> så det vil jo ikke gå.. Hvordan skal jeg gjøre det? Ja, jeg vet det er litt shabby skrevet Ps. Likte Dev Endret 12. juli 2005 av J_lle Lenke til kommentar
☀ ❄ Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 1. Fortell ofstream-en at den skal legge til utdata på slutten av filen: std::ofstream fout(fname.c_str(), std::ios::app); Flere modus-flagg 2. Uhm... Nøyaktig hva er det du ønsker å oppnå? Lenke til kommentar
J_lle Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 Det er ikke noe spesielt.. Det var bare en greie i boka at jeg skal gjøre forskjellige ting med store mengder data.. fin er ifstream.. leser det med loopen og sender til split som deler hver linje (som består av et ord og et tall), og legger det inn som first og second i map<int, string>... og så får vi se hva som skjer.. men problemet er altså string(f_s, f_e) som ikke vil inn i first i map'et... Greia er at jeg ikke kan noen andre måter å inserte i et map.. noe det sikkert er... Lenke til kommentar
☀ ❄ Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 Prøv med noe slik: typedef string::const_iterator iter; iter f_s = str.begin(); f_s = find_if(f_s, str.end(), not_space); iter f_e = find_if(f_s, str.end(), space); // Lag en int fra en std::string stringstream ss; ss << string(f_s, f_e); int x; ss >> x; iter s_s = find_if(f_e, str.end(), not_space); iter s_e = find_if(s_s, str.end(), space); m.insert(make_pair(x, string(s_s, s_e))); Lenke til kommentar
J_lle Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 (endret) <removed: stupidity> Endret 12. juli 2005 av J_lle Lenke til kommentar
☀ ❄ Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 (endret) Husket du å inkludere <sstream>? Endret 12. juli 2005 av Myubi Lenke til kommentar
J_lle Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 yup! fungerer flotters Lenke til kommentar
J_lle Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 (endret) ofstream fout(fname.c_str(), ios::out); // dette er i main() for (map<int, string>::const_iterator it; it != m.end(); ++it) { fout << it->first << " " << it->second << endl; } klikker når jeg kjører fila.. jeg la inn en if (m.empty()) i main og den var True så fingerer ikke denne? void split(const string& str, map<int, string>& m) { typedef string::const_iterator iter; iter f_s = str.begin(); f_s = find_if(f_s, str.end(), not_space); iter f_e = find_if(f_s, str.end(), space); iter s_s = find_if(f_e, str.end(), not_space); iter s_e = find_if(s_s, str.end(), space); stringstream ss; ss << string(f_s, f_e); int x; ss >> x; m.insert(make_pair(x, string(s_s, s_e))); } Endret 12. juli 2005 av J_lle Lenke til kommentar
☀ ❄ Skrevet 13. juli 2005 Del Skrevet 13. juli 2005 ofstream fout(fname.c_str(), ios::out); // dette er i main() for (map<int, string>::const_iterator it; it != m.end(); ++it) { fout << it->first << " " << it->second << endl; } klikker når jeg kjører fila.. Du må initialisere iteratoren din: ofstream fout(fname.c_str(), ios::out); // dette er i main() for (map<int, string>::const_iterator it = m.begin(); it != m.end(); ++it) { // ... jeg la inn en if (m.empty()) i main og den var True så fingerer ikke denne? void split(const string& str, map<int, string>& m) { typedef string::const_iterator iter; iter f_s = str.begin(); f_s = find_if(f_s, str.end(), not_space); iter f_e = find_if(f_s, str.end(), space); iter s_s = find_if(f_e, str.end(), not_space); iter s_e = find_if(s_s, str.end(), space); stringstream ss; ss << string(f_s, f_e); int x; ss >> x; m.insert(make_pair(x, string(s_s, s_e))); } Det forstod jeg ikke helt. Hva er det du vil oppnå, og hva er det som gjør at det ikke fungerer? Du kan gjerne være litt mer raus med kodesnutter også Lenke til kommentar
J_lle Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 (endret) uhm.. ja.. problemet er skrivinga til fila.. det her tenkte jeg skulle være enkelt, men haff.. paster like godt alt jeg #include <fstream> #include <string> #include <map> #include <iostream> #include <iterator> #include "split.h" int main(int argc, char *argv[]) { using namespace std; string fname = argv[1]; ifstream fin(fname.c_str(), ios::app); if (fin.bad()) cerr << "Error: Unable to open input stream (" + fname + ")" << endl; map<int, string> m; string str; while (getline(fin, str)) { split(str, m); } ofstream fout(fname.c_str(), ios::out); for (map<int, string>::const_iterator it = m.begin(); it != m.end(); ++it) { fout << it->first << " " << it->second << endl; } return 0; } #include <string> #include <map> #include <sstream> using namespace std; bool space(char c) { return isspace(c); } bool not_space(char c) { return !isspace(c); } void split(const string& str, map<int, string>& m) { typedef string::const_iterator iter; iter f_s = str.begin(); f_s = find_if(f_s, str.end(), not_space); iter f_e = find_if(f_s, str.end(), space); iter s_s = find_if(f_e, str.end(), not_space); iter s_e = find_if(s_s, str.end(), space); stringstream ss; ss << string(f_s, f_e); int x; ss >> x; m.insert(make_pair(x, string(s_s, s_e))); } Endret 14. juli 2005 av J_lle Lenke til kommentar
J_lle Skrevet 14. juli 2005 Forfatter Del Skrevet 14. juli 2005 Det ordna seg likevel.. Etter litt om og men og litt mystisk hjelp på IRC så fungerte det endelig.. Takker Myubi Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå