full driver test
#include <map>#include <string>#include <iostream>using namespace std;int nocase_cmp( const string &, const string&);struct case_insensitive_test{ bool operator()(const string & s1, const string& s2) const { return nocase_cmp(s1, s2) < 0; }};typedef std::multimap<std::string, int, case_insensitive_test> mymap;typedef mymap::const_reverse_iterator myiter;int nocase_cmp(const string & s1, const string& s2) { string::const_iterator it1=s1.begin(); string::const_iterator it2=s2.begin(); //stop when either string's end has been reached while ( (it1!=s1.end()) && (it2!=s2.end()) ) { if(::toupper(*it1) != ::toupper(*it2)) //letters differ? // return -1 to indicate smaller than, 1 otherwise return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1; //proceed to the next character in each string ++it1; ++it2; } size_t size1=s1.size(), size2=s2.size();// cache lengths //return -1,0 or 1 according to strings' lengths if (size1==size2) return 0; return (size1<size2) ? -1 : 1;}int main(int argc, const char** argv){mymap multimap_order;multimap_order.insert(pair<string, int>("ABC", 324));multimap_order.insert(pair<string, int>("abc", 122));multimap_order.insert(pair<string, int>("ABC", 324));multimap_order.insert(pair<string, int>("gds", 523));myiter const_it_replacement_begin = multimap_order.rbegin();myiter const_it_replacement_end = multimap_order.rend();myiter const_it = multimap_order.rbegin();for ( ; ; ){ if ( const_it != const_it_replacement_end ){ cout << (*const_it).first; } else{ break; } ++const_it;} return 0;}
I feel this can definately be better!
but i'm a noob and don't know how to make it better, please any point outs or recommendations?