Hm, the code seems to crash in merge_stats function (i marked it red) and i have no idea why? When i enter only one name and value, it's ok, but when i enter more then one name and value it crashes...
Code:#include <iostream> #include <map> #include <numeric> #include <set> #include <string> using namespace std; typedef multiset<double> SubData; typedef map<string, SubData> Data; void collect_data(Data &stats) { string name; while(cin >> name) { double val; cin >> val; stats[name].insert(val); } } void print_setstats(SubData const &stats) { size_t count = 0; double sum = 0.0, median; for(SubData::const_iterator p = stats.begin(); p != stats.end(); p++, count++) { if(count == (stats.size() - 1) / 2) { median = *p; if(stats.size() % 2 == 0) { SubData::const_iterator q = p; q++; median = (median + (*q))/2.0; } } sum += *p; } cout << "sum: " << sum << ", mean: " << sum/ (double) count << ", median: " << median << endl; } void merge_stats(SubData &dst, SubData &src) { SubData::iterator hint = dst.begin(); for(SubData::iterator p = src.begin(); p != src.end(); p++) { hint = dst.insert(hint, *p); src.erase(p); } } void print_stats(Data &stats) { SubData global_set; for(Data::iterator p = stats.begin(); p != stats.end(); p++) { cout << (*p).first << ": "; print_setstats((*p).second); merge_stats(global_set, (*p).second); } cout << "Global stats: "; print_setstats(global_set); } int main() { Data stats; collect_data(stats); print_stats(stats); return 0; }



LinkBack URL
About LinkBacks


