You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++中自动为map生成递增整数键的实现方案咨询

这个需求很好实现,核心思路是在类内部维护一个自动递增的键值计数器,每次创建新对象时自动分配当前计数器的值,然后更新计数器。下面是具体的实现方案:

实现思路
  • 给类添加两个私有成员:
    • classrooms_:用来存储你的std::map<int, std::vector<std::string>>数据
    • next_key_:记录下一个要分配的键值,初始值设为100
  • 提供一个公共方法(比如add_classroom),负责将新的教室数据存入map,并自动完成键值的分配与递增
完整代码示例
#include <map>
#include <vector>
#include <string>
#include <iostream>

class ClassroomManager {
private:
    std::map<int, std::vector<std::string>> classrooms_;
    int next_key_ = 100; // 起始键默认设为100

public:
    // 添加新教室,返回分配的键值(方便后续访问)
    int add_classroom(const std::vector<std::string>& classroom_info) {
        int current_key = next_key_;
        classrooms_[current_key] = classroom_info;
        next_key_++; // 分配完成后,键值自动递增
        return current_key;
    }

    // 可选:根据键值获取对应的教室数据
    std::vector<std::string>* get_classroom(int key) {
        auto it = classrooms_.find(key);
        if (it != classrooms_.end()) {
            return &(it->second);
        }
        return nullptr; // 未找到对应键时返回空指针
    }

    // 可选:打印所有教室数据,用于测试验证
    void print_all_classrooms() const {
        for (const auto& entry : classrooms_) {
            std::cout << "键值: " << entry.first << " | 教室信息: ";
            for (const std::string& info : entry.second) {
                std::cout << info << " ";
            }
            std::cout << "\n";
        }
    }
};

// 测试代码
int main() {
    ClassroomManager manager;

    // 第一次添加,键值为100
    manager.add_classroom({"数学教室", "3楼301室"});
    // 第二次添加,键值为101
    manager.add_classroom({"英语教室", "2楼205室"});
    // 第三次添加,键值为102
    manager.add_classroom({"科学实验室", "1楼103室"});

    manager.print_all_classrooms();
    return 0;
}
扩展说明
  • 如果需要允许用户自定义起始键值,可以给类添加带参数的构造函数:
    ClassroomManager(int start_key) : next_key_(start_key) {}
    
    使用时就可以这样初始化:ClassroomManager manager(200);,第一个键值会从200开始递增。
  • next_key_作为私有成员,避免了外部误修改导致的键值混乱,保证了自动分配的安全性。

内容的提问来源于stack exchange,提问作者Sam

火山引擎 最新活动