非整数数组索引

来源:互联网 发布:mac安装ps序列号 编辑:程序博客网 时间:2024/05/06 05:21

代码如下:

#include <string>#include <vector>class AssociativeArray {public:AssociativeArray();virtual ~AssociativeArray();int &operator[](const std::string &key);const int &operator[](const std::string &key) const;protected:class Element {public:Element(const std::string &key, int value) :mKey(key), mValue(value) {}std::string mKey;int mValue;};std::vector<Element> mData;};

#include "Array.h"#include <stdexcept>using namespace std;AssociativeArray::AssociativeArray() {}AssociativeArray::~AssociativeArray(){}int &AssociativeArray::operator[](const std::string &key){for (std::vector<Element>::iterator iter = mData.begin(); iter != mData.end(); ++iter) {if (iter->mKey == key) {return iter->mValue;}}return mData.insert(mData.end(), Element(key, 0))->mValue;}const int &AssociativeArray::operator[](const std::string &key) const{for (auto iter = mData.cbegin(); iter != mData.cend(); ++iter) {if (iter->mKey == key) {return iter->mValue;}}throw invalid_argument("Key '" + key + "' doest`t exist");}

#include "Array.h"#include <iostream>using namespace std;int main(){AssociativeArray myArray;myArray["Key 1"] = 11;myArray["Key 2"] = 22;myArray["Key 3"] = 33;try {cout << myArray["Key 1"] << endl;cout << myArray["Key 2"] << endl;// Test const operator[]const AssociativeArray& c = myArray;cout << c["Key 3"] << endl;cout << c["Key 4"] << endl;}catch (const invalid_argument& ex) {cout << "Caught exception: " << ex.what() << endl;}return 0;}


0 0