使用模板运算符创建二维关联阵列
Creating 2-D Associative Array Using Template Operator
为了定义2-D关联数组,我在类中编写了模板运算符,使其更接近原始数组。这是我的操作员功能。
template <class T, class U, class V>
T& TwoAssocDArray<T,U,V>::operator [](U input1)[](V input2) {
for(int i=0; i<size(); i++)
if(stack[i].key1 == input1 && stack[i].key2 == input2)
return stack[i].d;
DataPack pack;
pack.key1 = input1;
pack.key2 = input2;
stack.push_back(pack);
return stack[size].d;
}
类接口,
#ifndef _DATASTRUCTURE_H_
#define _DATASTRUCTURE_H_
#include <vector>
using namespace std;
template <class T, class U, class V>
class TwoDAssocArray {
private:
typedef struct _DataPack {
T d;
U key1;
V key2;
} DataPack;
vector<DataPack> stack;
public:
int size();
bool isIn(U input1, V input2);
bool add(T data, U input1, V input2);
T get(U input1, V input2);
T& operator [](U input1)[](V input2);
};
#endif
然后我在main()中测试了它。
int main(int argc, char *argv[]) {
TwoDAssocArray<int, char*, char*> assocArr;
assocArr["in1"]["in2"] = 2246001;
cout << assocArr["in1"]["in2"] << endl;
return 0;
}
经过构建和运行,我发现它不起作用,出现了十几个错误。我认为主要原因是我不熟悉的模板语法。我相信大量的错误总是来自于一些语法错误。
如果有人能帮助我,我将不胜感激。
T& operator [](U input1)[](V input2);
你不能那样连锁经营者。你可能已经看到operator[]
也只能接受一个参数,所以你对T& operator [](U input1, V input2);
不太幸运
从这篇文章的标题来看,你真的很想做:
assocArr["in1"]["in2"] = 2246001;
有一种方法可以获得这种功能,那就是在一个维度上实现它:
template <class T, class U >
class MyArray {
private:
struct DataPack {
T d;
U key1;
};
std::vector<DataPack> stack;
public:
T& operator[]( U key );
};
int main( void )
{
MyArray< int, char > one_dimension;
one_dimension[ 'a' ]; // returns an int reference
// Now the trick
MyArray< MyArray< int, char >, char > two_dimensions;
two_dimensions['a']; // returns a MyArray< int, char > reference
two_dimensions['a']['b']; // returns an int reference
}
另外,请注意我声明结构的方式,这是我的朋友C++。要添加,请不要使用char *
,而是使用const char *
。其实不用const char *
,用std::string
。
可以测试const char *
的相等性,但您不会比较c字符串中的内容,而是比较指针的地址。
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++ 中动态二维数组的访问冲突
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何将整数字符串转换为整数的二维向量?
- 二维矢量数据成员
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 使用模板运算符创建二维关联阵列