您的位置:首页 > 其它

stl 学习笔记 11

2007-12-05 00:46 417 查看

//stl/map1


#include <iostream>


#include <map>


#include <string>


using namespace std;




int main()




...{


//StringFloatMap


typedef map<string,float> StringFloatMap;




StringFloatMap stocks;




stocks["BASF"] = 369.50;


stocks["VW"] = 413.50;


stocks["Daimler"] = 819.00;


stocks["BMW"] = 834.00;


stocks["Siemens"] = 842.00;




StringFloatMap::iterator pos;




for(pos = stocks.begin();pos != stocks.end(); ++pos)




...{


cout <<"stocks: "<<pos ->first <<" "


<<"price: " << pos ->second <<endl;


}


cout <<endl;




for(pos = stocks.begin(); pos != stocks.end(); ++pos)




...{


pos ->second *= 2;


}




for(pos = stocks.begin();pos != stocks.end(); ++pos)




...{


cout <<"stocks: " << pos ->first<< " "


<<"price: " << pos ->second <<endl;


}


cout <<endl;




stocks["Volkswagen"] = stocks["VW"];


stocks.erase("VW");




for(pos == stocks.begin(); pos != stocks.end(); ++pos)




...{


cout <<"stock: "<< pos ->first <<" "


<<"price: "<< pos ->second <<endl;


}


}






/**//*


result


======================================


stocks: BASF price: 369.5


stocks: BMW price: 834


stocks: Daimler price: 819


stocks: Siemens price: 842


stocks: VW price: 413.5




stocks: BASF price: 739


stocks: BMW price: 1668


stocks: Daimler price: 1638


stocks: Siemens price: 1684


stocks: VW price: 827


=======================================


*/


//mmap1.cpp


#include <iostream>


#include <map>


#include <string>


#include <iomanip>


using namespace std;




int main()




...{


typedef multimap<string,string> StrStrMMap;


StrStrMMap dict;




dict.insert(make_pair("day","Tag"));


dict.insert(make_pair("strange","fremd"));


dict.insert(make_pair("car","Auto"));


dict.insert(make_pair("smart","elegant"));


dict.insert(make_pair("trait","Merkmal"));


dict.insert(make_pair("strange","seltsam"));


dict.insert(make_pair("smart","raffiniert"));


dict.insert(make_pair("smart","klug"));


dict.insert(make_pair("clever","raffiniert"));




StrStrMMap::iterator pos;


cout.setf(ios::left,ios::adjustfield);


cout <<' ' << setw(10) <<"English "


<<"German "<<endl;


cout <<setfill('-') <<setw(20) <<""


<<setfill(' ')<<endl;




for(pos = dict.begin(); pos != dict.end();++pos)




...{


cout <<' ' <<setw(10) <<pos ->first.c_str()


<< pos ->second <<endl;


}


cout <<endl;




string word("smart");


cout <<word<<": " <<endl;




for(pos = dict.lower_bound(word);


pos != dict.upper_bound(word);


++pos)




...{


cout <<" " << pos ->second <<endl;


}




word =("raffiniert");


cout <<word <<": " <<endl;




for(pos = dict.begin(); pos != dict.end(); ++pos)




...{


if(pos ->second ==word)


cout <<" "<<pos ->first<<endl;


}


}






/**//*


result


===============================================


English German


--------------------


car Auto


clever raffiniert


day Tag


smart elegant


smart raffiniert


smart klug


strange fremd


strange seltsam


trait Merkmal




smart:


elegant


raffiniert


klug


raffiniert:


clever


smart


==================================================


*/


//stl/mapfind.cpp




/**//*


================


find Object


================


*/


#include <iostream>


#include <algorithm>


#include <map>


using namespace std;




template <class K,class V>


class value_equals




...{


private:


V value;


public:


value_equals(const V& v)




:value(v)...{}




bool operator()(pair<const K,V> elem)




...{


return elem.second == value;


}


};




int main()




...{


typedef map<float,float> FloatFloatMap;


FloatFloatMap coll;


FloatFloatMap::iterator pos;




coll[1] = 7;


coll[2] = 4;


coll[3] = 2;


coll[4] = 3;


coll[5] = 1;


coll[6] = 6;


coll[7] = 3;




pos = coll.find(3.0);




if(pos != coll.end())...{


cout <<pos ->first<<": "


<<pos ->second<<endl;


}




pos = find_if(coll.begin(),coll.end(),


value_equals<float,float>(3.0));




if(pos != coll.end())




...{


cout <<pos ->first<<": "


<<pos ->second<<endl;


}


}






/**//*


result


====================


3: 2


4: 3


====================


*/


//stl/mapcmp.cpp






/**//*


=================================================


高级技巧


1.如何使用maps


2.写仿函数


3.执行器定义排序准则


4.比较字符串,不在乎大小写


=================================================


*/


#include <iostream>


#include <iomanip>


#include <map>


#include <string>


#include <algorithm>


using namespace std;




class RuntimeStringCmp




...{


public:




enum cmp_mode ...{normal,nocase};


private:


const cmp_mode mode;




static bool nocase_compare(char c1,char c2)




...{


return toupper(c1) <toupper(c2);


}




public:


RuntimeStringCmp(cmp_mode m = normal):mode(m)




...{}




bool operator() (const string& s1,const string& s2)const




...{


if(mode == normal)


return s1 < s2;


else


return lexicographical_compare(s1.begin(),s1.end(),


s2.begin(),s2.end(),nocase_compare);


}


};




typedef map<string,string,RuntimeStringCmp> StringStringMap;




void fillAndPrint(StringStringMap& coll);




int main()




...{


StringStringMap coll1;


fillAndPrint(coll1);




RuntimeStringCmp ignorecase(RuntimeStringCmp::nocase);




StringStringMap coll2(ignorecase);


fillAndPrint(coll2);


}




void fillAndPrint(StringStringMap& coll)




...{


coll["Deutshland"] = "Germanry";


coll["deutsh"] = "German";


coll["Hanken"] = "snag";


coll["arbeiten"] = "word";


coll["Hund"] = "dog";


coll["gehen"] = "go";


coll["Unternehmen"] = "enterprise";


coll["unternehmen"] = "undertake";


coll["gehen"] = "walk";


coll["Bestatter"] = "undertaker";




StringStringMap::iterator pos;




cout.setf(ios::left,ios::adjustfield);


for(pos=coll.begin(); pos != coll.end();++pos)




...{


cout <<setw(15)<<pos ->first.c_str() <<" "


<<pos ->second <<endl;


}


cout <<endl;


}






/**//*


result


=============================


Bestatter undertaker


Deutshland Germanry


Hanken snag


Hund dog


Unternehmen enterprise


arbeiten word


deutsh German


gehen walk


unternehmen undertake




arbeiten word


Bestatter undertaker


deutsh German


Deutshland Germanry


gehen walk


Hanken snag


Hund dog


Unternehmen undertake


===============================


*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: