以下代码实现stl中容器 map 的简单操作。包括插入,更新,遍历,查找。
#pragma once #include "string" #include "iostream" #include "map" using namespace std; class CStudent { string name; int english; public: CStudent(void); ~CStudent(void); CStudent(string name, int english); public: void inline printit() { cout<<"name="; cout<<name; cout<<" english="; cout<<english; cout<<endl; } }; #include "stdafx.h" #include "Student.h" CStudent::CStudent(void) { } CStudent::CStudent(string name, int english) { this->name = name; this->english = english; } CStudent::~CStudent(void) { }
#pragma once #include "Student.h" #include "map" using namespace std; class CStudentMap { public: CStudentMap(void); ~CStudentMap(void); private: map<int, CStudent> m_studentmap; public: bool insert(int number, CStudent stu); bool remove(int number); bool update(int number, CStudent stu); bool find(int number, CStudent& stu); void output(); int count(); }; #include "stdafx.h" #include "StudentMap.h" #include "algorithm" CStudentMap::CStudentMap(void) { } CStudentMap::~CStudentMap(void) { } int CStudentMap::count() { return m_studentmap.size(); } bool CStudentMap::insert(int number, CStudent stu) { pair<map<int, CStudent>::iterator, bool> Insert_Pair; Insert_Pair = m_studentmap.insert(pair<int, CStudent>(number, stu)); if(Insert_Pair.second) { return true; } else { return false; } /*Insert_Pair = m_studentmap.insert(map<int, CStudent>::value_type(number, stu)); if(Insert_Pair.second == true) { return true; } else { return false; }*/ } bool CStudentMap::remove(int number) { map<int, CStudent>::iterator LI; LI = m_studentmap.find(number); if (LI != m_studentmap.end()) { m_studentmap.erase(LI); return true; } else { return false; } } bool CStudentMap::update(int number, CStudent stu) { m_studentmap[number] = stu; return true; } void CStudentMap::output() { map<int, CStudent>::iterator LI; for(LI = m_studentmap.begin(); LI != m_studentmap.end(); LI++) { LI->second.printit(); } } bool CStudentMap::find(int number, CStudent &stu) { map<int, CStudent>::iterator LI; LI = m_studentmap.find(number); if (LI != m_studentmap.end()) { stu = (LI)->second; return true; } else { return false; } }
以下为主函数测试:
// stlmap.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "StudentMap.h" int _tmain(int argc, _TCHAR* argv[]) { CStudentMap smap; CStudent stu[10]; for(int i=0; i<10; i++) { char buff[100]; sprintf_s(buff, 100 ,"zhang%02d",i); string name(buff); CStudent student(name, i*10); stu[i] = student; smap.insert(i, stu[i]); } smap.output(); bool ret1 = smap.insert(0, stu[0]); bool ret = smap.find(15, stu[8]); cout<<"************************"<<endl; if (ret) { stu[8].printit(); } else { cout<<"not find"<<endl; } system("pause"); return 0; }