Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function_object lost value of data member after for_each
- // map
- #include <iostream>
- #include <string>
- #include <map>
- #include <algorithm>
- using namespace std;
- struct Item {
- int count;
- double value;
- };
- class Sum {
- public:
- Sum() {
- sum_all = 0.0;
- }
- // keys are stored as const in a map
- void operator()(pair<const string, Item>& pair) {
- cout << pair.first << "n";
- cout << "Sum: " << pair.second.value << "n";
- cout << "Middle: " << pair.second.value/pair.second.count << "n";
- sum_all += pair.second.value;
- }
- double get_sum_all() {
- return sum_all;
- }
- private:
- double sum_all;
- };
- int main() {
- map<string, Item> table;
- for (int i = 0; i < 3; i++) {
- string key;
- double value;
- cin >> key;
- cin >> value;
- // new item
- if (table.find(key) == table.end()) {
- Item item;
- item.count = 1;
- item.value = value;
- table[key] = item;
- } else {
- Item& item = table[key];
- item.count++;
- item.value += value;
- }
- }
- Sum sum;
- for_each(table.begin(), table.end(), sum);
- cout << "table.size() " << table.size() << "n";
- cout << "sum.get_sum_all() " << sum.get_sum_all() << "n";
- cout << "sum.get_sum_all()/table.size()" << sum.get_sum_all()/table.size() << "n";
- return 0;
- }
- [peter@donut chap_6]$ ./u3_map
- foo 1
- bar 2
- foo 1
- bar
- Sum: 2
- Middle: 2
- foo
- Sum: 2
- Middle: 1
- table.size() 2
- sum.get_sum_all() 0
- sum.get_sum_all()/table.size()0
- sum = for_each(table.begin(), table.end(), sum);
Advertisement
Add Comment
Please, Sign In to add comment