⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 namedb.cpp

📁 C++高级编程这本书所附的源代码
💻 CPP
字号:
#include "NameDB.h"#include <fstream>using namespace std;//// Reads the names from the file and populates the database.// The database is vector of name/count pairs, storing the// number of times each name shows up in the raw data.//NameDB::NameDB(const string& nameFile) throw (invalid_argument){  // Open the file and check for errors  ifstream inFile(nameFile.c_str());  if (!inFile) {    throw invalid_argument("Unable to open file\n");  }  // Read the names one at a time.  string name;  while (inFile >> name) {    // Lookup the name in the database so far.    if (nameExists(name)) {      // If the name exists in the database, just      // increment the count      incrementNameCount(name);    } else {      // If the name doesn't yet exist, add it with      // a count of 1.      addNewName(name);    }  }  inFile.close();}//// nameExists//// Returns true if the name exists in the database. Returns false otherwise.//bool NameDB::nameExists(const string& name) const{  // Iterate through the vector of names looking for the name.  for (vector<pair<string, int> >::const_iterator it = mNames.begin();       it !=  mNames.end(); ++it) {    if (it->first == name) {      return (true);    }  }  return (false);}//// incrementNameCount//// Precondition: name exists in the vector of names.// Postcondition: the count associated with name is incremented.//void NameDB::incrementNameCount(const string& name){  for (vector<pair<string, int> >::iterator it = mNames.begin();       it != mNames.end(); ++it) {    if (it->first == name) {      it->second++;      return;    }  }}//// addNewName//// Adds a new name to the database.//void NameDB::addNewName(const string& name){  mNames.push_back(make_pair<string, int>(name, 1));}//// getNameRank//// Returns the rank of the name.// First looks up the name to obtain the number of babies with that name.// Then iterates through all the names, counting all the names with a higher// count than the specified name. Returns that count as the rank.//int NameDB::getNameRank(const string& name) const{  // Make use of the getAbsoluteNumber() method  int num = getAbsoluteNumber(name);  // Check if we found the name  if (num == -1) {    return (-1);  }  //  // Now count all the names in the vector that have a  // count higher than this one. If no name has a higher count,  // this name is rank number 1. Every name with a higher count  // decreases the rank of this name by 1.  //  int rank = 1;  for (vector<pair<string, int> >::const_iterator it = mNames.begin();       it != mNames.end(); ++it) {    if (it->second > num) {      rank++;    }  }  return (rank);}//// getAbsoluteNumber//// Returns the count associated with this name//int NameDB::getAbsoluteNumber(const string& name) const{  for (vector<pair<string, int> >::const_iterator it = mNames.begin();       it != mNames.end(); ++it) {    if (it->first == name) {      return(it->second);    }  }  return (-1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -