在c ++中创建键值对的字典

时间:2014-09-13 00:39:24

标签: c++

#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 ,如果每个词典都包含相同的键,则输出错误消息。

我的老师要求我们不要使用stringsvectors,所以我使用了数组 我坚持联合功能,不知道该怎么做。 Plz帮助我。

3 个答案:

答案 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 字典。更新插入方法以禁止重复。