#include <iostream>
using namespace std;
class item {
int size;
int value[30];
char key[30][20];
int n, k;
int index;
char* a[30], *b[30], search, remove;
public:
void putdatavalue(void) {
for (int i = 0; i < size; i++) {
cout << value[i] << ","
<< "\n";
}
}
void display(void) {
for (int i = 0; i < size; i++) {
cout << "(" << key[i] << "," << value[i] << ")"
<< "\n";
}
}
};
void item::getdata(void) {
cout << "entr size\n";
cin >> size;
for (int i = 0; i < size; i++) {
cout << "entr key\n";
cin >> key[i];
cout << "entr value\n";
cin >> value[i];
}
cout << "chk whether keys are different \n";
for (int i = 0; i < size; i++) {
a[i] = key[i];
b[i] = key[i + 1];
if (*a[i] == *b[i]) {
cout << "key" << i << "and key" << i + 1 << "are same\n";
cout << "re-entr key\n";
cin >> key[i + 1];
} else {
cout << "key[" << i << "] and key[" << i + 1 << "] are diff\n";
}
}
}
int main() {
item obj1;
obj1.getdata();
int m;
do {
cout << "choose ur option and enter appropriate no"
<< "\n";
cout << "\n1 : display keys \n";
cout << "\n2 : display value \n";
cout << "\n3 : display key-value pair \n";
cout << "\n4 : add a key-value pair \n";
cout << "\n5 : remove a key-value pair \n";
cout << "\n6 : search for key and its value \n";
cout << "\n7 : quit \n";
cin >> m;
switch (m) {
break;
case 1: {
obj1.putdatakey();
} break;
case 2: {
obj1.putdatavalue();
} break;
case 3: {
obj1.display();
} break;
case 7:
break;
default:
cout << "error in input \n";
}
} while (m != 7);
return 0;
}
我想在C ++中使用以下函数创建key-value
对的字典:
显示键,显示值,显示键值对,添加键值,删除键值对,找出键是否存在并返回值。
字典应该可以为空。
您应该重载operator+
以执行两个词典的 union ,如果每个词典都包含相同的键,则输出错误消息。
我的老师要求我们不要使用strings
和vectors
,所以我使用了数组
我坚持联合功能,不知道该怎么做。 Plz帮助我。
答案 0 :(得分:2)
我的老师要求我们不要使用字符串和向量,所以我使用了数组
如果没有限制,那么我会使用std::map
。
通过限制,我会使用二进制搜索树以及以下密钥结构
struct BstNode {
int key_; // 'int' or some other appropriate
int value_; // - do -
BstNode * left_;
BstNode * right_;
};
答案 1 :(得分:1)
如前所述,如果您的老师要求键值对,地图将是最好的途径。由于规范声明您基本上不允许使用任何内置库,因此对how maps are implemented in c++
的简单Google搜索会返回指向pdf "Implementing Maps"的链接。
由于地图包含唯一键值,因此数学上将其定义为Set。看一个联盟如何在一个集合中运作应该有所帮助。
当涉及到重载operator+
时,另一个Google搜索产生了"9.2 — Overloading the arithmetic operators"。
欢迎来到计算机科学的科学部分!
答案 2 :(得分:0)
正如@Arun所说,使用二进制搜索树作为字典。
联盟的结果就是两个词典的结果。
最简单的方法是遍历另一个字典,逐个节点,将其他字典对插入 this 字典。更新插入方法以禁止重复。