精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。
map是一个模板,使用键获取一个值。
另一个问题是,你将要使用像你自己的类,而不是数据类型,上面示例里一直使用int到现在 。要创建一个“为模板准备好”的类,你必须确保类包含一些成员函数和运算符 。基本上有:
对于一个特定的模板,会有额外的要求把其它操作符重载下,例如,如果你计划用map,你将必须重载关系运算符。但是,本文对此并不描述。
// Program: Map Own Class // Purpose: To demonstrate a map of classes #include <string> #include <iostream> #include <vector> #include <map> using namespace std; class CStudent { public : int nStudentID; int nAge; public : // Default Constructor - Empty CStudent() { } // Full constructor CStudent(int nSID, int nA) { nStudentID=nSID; nAge=nA; } // Copy constructor CStudent(const CStudent& ob) { nStudentID=ob.nStudentID; nAge=ob.nAge; } // Overload = void operator = (const CStudent& ob) { nStudentID=ob.nStudentID; nAge=ob.nAge; } }; int main(int argc, char* argv[]) { map <string, CStudent> mapStudent; mapStudent["Joe Lennon"] = CStudent(103547, 22); mapStudent["Phil McCartney"] = CStudent(100723, 22); mapStudent["Raoul Starr"] = CStudent(107350, 24); mapStudent["Gordon Hamilton"] = CStudent(102330, 22); // Access via the name cout << "The Student number for Joe Lennon is " << (mapStudent["Joe Lennon"].nStudentID) << endl; return 0; }
为了避免调试模式下一些烦人的错误,使用以下编译器用法:
#pragma warning(disable: 4786)
另一种疑难杂症是:你必须确保,在尖括号和名称之间要插入空格。这是因为> >会看起来象位的移位运算符,所以 :
vector <list<int>> veclis;
将给出一个错误。相反,把它写:
vector <list <int> > veclis;
以避免编译错误。