c++ - 考试C++保存列表的名称属性

标签 c++

在我的 C++ 考试中,我发现我在处理本应相对简单的内容时遇到了一些困难。我想我忽略了我的问题。为了不在网上发布考试的一部分而惹上麻烦,我将对我遇到麻烦的部分做一个非常简单的表示。

我期望创建一个类 myClass,我可以在其中添加项目 item。然后我应该能够在该列表中列出我想要的一些项目。列表中的项目数量应该是无限的。每个列表都应该有一个特定的(唯一的)名称。我还被告知不要为列表创建新类并自己选择合适的容器。

myClass::myClass(){
    itemlist= {};
    lists= {};
}

void myClass::addItem(Item &item){
    itemlist.emplace_back(item);
}

void myClass::makeList(string listname){
    vector <Item> list = {};
    // list .name = listname
    lists.emplace_back(list);
}

void myClass::addItemToList(string listName, Item &item){
    for (int i=0; i<lists.size; i++){
        if lists[i].name == listName {
            lists.emplace_back(item);
            return;
        }
    }
}

我不知道如何在不为列表创建新类的情况下将名称链接到列表。我考虑过存储另一个包含列表名称的列表并使用它,但这样做似乎是错误的,因为它们实际上并没有链接。试图查找是否有办法从字符串 listname 参数创建列表变量 listname,但显然这是不可能的。

至于容器,我选择了一个 vector ,因为它们可以在其中存储“无限”量的数据。我使用 itemlist 来存储曾经添加到 myClass 的所有项目,并使用 lists 来存储所有曾经创建的列表。

可以用什么方式为每个列表存储一个名称并使其链接起来?

最佳答案

我认为命名列表的最简单方法是使用std::unordered_map http://en.cppreference.com/w/cpp/container/unordered_map

然后你就可以像这样使用你的列表了:

lists["first_list"].push_back(...);
lists["another_list"].size();
lists["create_new_list"] = {};

关于c++ - 考试C++保存列表的名称属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48558046/

相关文章:

c++ - gthr-default.h 中的多重定义

c++ - 当我们进行向下转型时内部会发生什么?

c++ - 指向不完整类型成员函数的指针

c++ - 如何从其他 C++ 项目构建和运行 visual studio-8 中的 C++ 项目?

c++ - 无分支内存管理器?

c++ - 为什么这段 C++ 代码会产生段错误?

c++ - 在具有虚拟析构函数的基类的子类中不指定析构函数是否安全?

c++ - objective-c++ 如何将方法添加到 c++ 类中

c++ - 如何在开始时停止程序以将GDB附加到该程序?

c++ - 当 std::uint_fast32_t 在 GCC 中为 4 字节时,std::mt19937 失败