#include <iostream>
#include <string>
#include <map>
using namespace std;
typedef map<string, int>::iterator iter_t;
typedef map<string, int>::reverse_iterator r_iter_t;
int main() {
map<string, int> test;
test["2+4"] = 6;
test["1+2"] = 3;
if (test["1+3"] == 0) ;
pair<iter_t, bool> ret;
// insert(map<string, int>::value_type())
ret = test.insert(pair<string, int>("1+4", 5));
printf("%d\n", ret.second);
ret = test.insert(pair<string, int>("1+3", 5));
printf("%d\n", ret.second);
iter_t f = test.find("1+4");
//C++11 The other versions return an iterator to the element that follows
// the last element removed
//C++98 void erase (iterator first, iterator last);
if (f != test.end()) {
test.erase(f);
printf("%s : %d\n", f->first.c_str(), f->second);
}
test.erase(test.find("1+3"), test.end());
f = test.find("1+1");
if (f == test.end()) {
test.insert(pair<string, int>("1+1", 2));
}
printf("size: %d\n", (int)test.size());
// cbegin&cend return const_iterator
printf("---------------------------\n");
for (iter_t i = test.begin() ; i != test.end() ; ++i) {
printf("%s %d\n", i->first.c_str(), i->second);
}
printf("---------------------------\n");
for (r_iter_t i = test.rbegin() ; i != test.rend() ; ++i) {
printf("%s %d\n", i->first.c_str(), i->second);
}
printf("---------------------------\n");
test.clear();
printf("size: %d\n", (int)test.size());
return 0;
}